![]() |
enum und Strings
Sorry,
meine Suche ging ins leere und ein ordentlicher Titel ist mir auch nicht eingefallen. Ich erkläre erst mal wie ich es sonnst mache und dann die neue Aufgabenstellung. Es soll ja auch noch jemand durchsehen. :lol: Ich habe eine Reihe von Fehlercodes die ich als Resourcestrings definiere. Dann einen Aufzählungstyp für meine Fehlercodes und zum Schluss ein Array mit den Strings.
Delphi-Quellcode:
Taucht im Programmablauf ein Fehler auf und ich will diesen Anzeigen, so kann ich diesen wie folgt ausgeben:
resourcestring
rs_Error1 = 'Error 1'; rs_Error2 = 'Error 2'; rs_Error3 = 'Error 3'; rs_Error4 = 'Error 4'; type TMyErrors = ( me_Error1, me_Error2, me_Error3, me_Error4 ); const MyErrorStrings : Array[TMyErrors] of String = ( rs_Error1, rs_Error2, rs_Error3, rs_Error4 )
Delphi-Quellcode:
Das ist als Beispiel gedacht, sollte aber genügen.
procedure AddErrorString(Error : TMyError)
begin Memo.Lines.Add(MyErrorString[Error]); end; Jetzt das Problem: Ich bekomme Errors als Integer-Wert geliefert. Diese sind aber leider etwas aus der Reihe. Es gibt die Errors 1 und 2 und dann zum Bsp. 30 und 41(und ne Menge mehr). Mit dem Aufzählungstyp ist das ja noch hin zu bekommen:
Delphi-Quellcode:
aber dann ist bei mir Schluss. Muß ich jetzt wirklich eine eigene Function für meine Errorcodes schreiben wie:
type
TMyErrors = ( me_Error1, me_Error2, me_Error30 = 30, me_Error41 = 41 );
Delphi-Quellcode:
oder gibt es einen Deklarationsweg wie oben?
function GetErrorString(Error : TMyError) : String;
begin case Error of me_Error1 : Result := rs_Error1; me_Error2 : Result := rs_Error2; me_Error30 : Result := rs_Error30; me_Error41 : Result := rs_Error40; end; end; Ich hoffe, ich hab mich jetzt nicht zu sehr geoutet, aber es gibt ja nur dumme Antworten und keine dummen Fragen. :) Gruß oki |
Re: enum und Strings
Eigentlich müsste Delphi doch mit lückenhaften Enums klarkommen und automatisch ein Array mit nil-Einträgen anlegen?
|
Re: enum und Strings
Das wäre aber recht ineffektiv, wenn die Fehlercodes einen großen Bereich abdecken.
|
Re: enum und Strings
Ähmmm,
lückenhafte Enums sind kein Problem, aber wie deklariert man dann das Array? Entweder man füllt die Lücken mit Leerstrings ( :kotz: dann lieber eine Function) oder ....??? Gruß |
Re: enum und Strings
Hallo oki,
mag sein, dass mir die Feinheiten deines Ansatzes gerade entgehen, aber ich würde anders vorgehen. Wenn du mit externen String-Ressourcen arbeitest, dann bekommst du die Abbildung von Fehlercodes auf Fehlermeldungen quasi geschenkt. Füge dein Resource-Script dem Projekt hinzu:
Code:
In deinem Programm funktioniert dann das hier:
/* ErrMsg.rc */
STRINGTABLE BEGIN 1, "Error#1" 2, "Error#2" 31, "Error#31" 41, "Error#41" END
Delphi-Quellcode:
Empfehlenswert sind noch Konstanten für die Fehlercodes.
function AppErrorMessage(msgid: Integer): string;
begin Result := LoadStr(msgid); if Result = '' then Result := 'Application Error #' + IntToStr(msgId); end; Freundliche Grüße |
Re: enum und Strings
Hi Marabu,
das mit der Stringtable kenne ich so nicht. Aber da sollte mir die OH weiterhelfen. Leider sind das was ich brauche Fehlermeldungen eines GSM-Modems, also CME und CMS-Fehlercodes. Somit sehe ich für externe Stringressourcen die quasi mit benutzen kann schwarz. Wie gesagt, ich schau mich mal zu dem Thema Stringtable um und melde mich noch mal. Dank und Gruß oki |
Re: enum und Strings
Jo,
so wie es aussieht läuft das auf die Verwendung von Ressourcestrings hinaus. Da ich aber diverse Ressourcestrings verwende (wegen Übersetzung in mehrere Sprachen) sehe ich da einige Probleme; besser gesagt keinen rechten Ansatz wie ich das bewerkstelligen soll. Das Thema Stringtable glaub ich aber verstanden zu haben. In meinem ersten Beispiel erstellt die IDE aus meinen als Ressourcestring deklarierten Stringkonstanten genau so eine Stringtable - glaube ich -. Imho kann ich dann auch eine entsprechende Function GetErrorStr schreiben. Läuft somit aufs gleiche raus. Damit setze ich den Thread auf beantwortet und danke allen für die Hilfe, Gruß oki |
Re: enum und Strings
Zitat:
Ok, diese Forumsmessage war vermutlich nicht besonders hilfreich, aber ich wollte auch nochmal was schreiben hier :stupid: |
Re: enum und Strings
Hi bluesbear,
wenn du gerne was schreiben willst; darfst du in meinem Thread. :lol: Aber zurück zum Thema. Ja, an vielen stellen ist eine Function angebracht. Auch gerade bei großen Projekten hab ich es mir teilweise angewöhnt solche Konstanten und Typen an einer Stelle zu definieren. Das scheint dann wieder übersichtlicher. Manchmal ist es aber auch nur Geschmackssache. Gruß oki |
Re: enum und Strings
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz