AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

enum und Strings

Ein Thema von oki · begonnen am 11. Mär 2008 · letzter Beitrag vom 11. Mär 2008
Antwort Antwort
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#1

enum und Strings

  Alt 11. Mär 2008, 15:17
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.

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:
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
  )
Taucht im Programmablauf ein Fehler auf und ich will diesen Anzeigen, so kann ich diesen wie folgt ausgeben:

Delphi-Quellcode:
procedure AddErrorString(Error : TMyError)
begin
  Memo.Lines.Add(MyErrorString[Error]);
end;
Das ist als Beispiel gedacht, sollte aber genügen.

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:
type
  TMyErrors = (
  me_Error1,
  me_Error2,
  me_Error30 = 30,
  me_Error41 = 41
  );
aber dann ist bei mir Schluss. Muß ich jetzt wirklich eine eigene Function für meine Errorcodes schreiben wie:

Delphi-Quellcode:
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;
oder gibt es einen Deklarationsweg wie oben?

Ich hoffe, ich hab mich jetzt nicht zu sehr geoutet, aber es gibt ja nur dumme Antworten und keine dummen Fragen.

Gruß oki
42
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: enum und Strings

  Alt 11. Mär 2008, 15:20
Eigentlich müsste Delphi doch mit lückenhaften Enums klarkommen und automatisch ein Array mit nil-Einträgen anlegen?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: enum und Strings

  Alt 11. Mär 2008, 15:23
Das wäre aber recht ineffektiv, wenn die Fehlercodes einen großen Bereich abdecken.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#4

Re: enum und Strings

  Alt 11. Mär 2008, 15:24
Ähmmm,

lückenhafte Enums sind kein Problem, aber wie deklariert man dann das Array? Entweder man füllt die Lücken mit Leerstrings ( dann lieber eine Function) oder ....???

Gruß
42
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: enum und Strings

  Alt 11. Mär 2008, 16:27
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:
/* ErrMsg.rc */

STRINGTABLE
BEGIN
  1,  "Error#1"
  2,  "Error#2"
  31, "Error#31"
  41, "Error#41"
END
In deinem Programm funktioniert dann das hier:

Delphi-Quellcode:
function AppErrorMessage(msgid: Integer): string;
begin
  Result := LoadStr(msgid);
  if Result = 'then
    Result := 'Application Error #' + IntToStr(msgId);
end;
Empfehlenswert sind noch Konstanten für die Fehlercodes.

Freundliche Grüße
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: enum und Strings

  Alt 11. Mär 2008, 18:27
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
42
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: enum und Strings

  Alt 11. Mär 2008, 18:41
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
42
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: enum und Strings

  Alt 11. Mär 2008, 19:45
Zitat von oki:
Imho kann ich dann auch eine entsprechende Function GetErrorStr schreiben. Läuft somit aufs gleiche raus.
Ich finde das ist sowieso die als Quellcode am einfachsten zu lesende und am besten zu wartende Variante. Insbesondere in Bezug auf Mehrsprachigkeit. Also nach meiner Erfahrung mit einem Monsterprojekt. Jfyi...
Ok, diese Forumsmessage war vermutlich nicht besonders hilfreich, aber ich wollte auch nochmal was schreiben hier
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: enum und Strings

  Alt 11. Mär 2008, 19:57
Hi bluesbear,
wenn du gerne was schreiben willst; darfst du in meinem Thread.

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
42
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: enum und Strings

  Alt 11. Mär 2008, 20:23
Zitat von oki:
Manchmal ist es aber auch nur Geschmackssache.Gruß oki
Ja, wenn ich mich z.B. nach 8 Jahren oder so erinnern soll, was ich damals eigentlich da gemacht habe, find ich das einfach einfacher, wenn das da mit sonem schönen case Konstrukt da steht. Da brauch ich nicht soviel zu erinnern und denken <g>. Das wollte ich nur mal so dazusagen.
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz