Name von Aufzähltypen
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Name von Aufzähltypen
Wenn ich einen Aufzähltyp
var x: (blau, gelb, rot)
habe, kann ich mit dem write-Befehl den Namen des aktuellen Werts ausgeben. Ich habe aber nicht gefunden, wie ich sonst im Programm auf den String-Wert direkt zugreifen kann (und ChatGPT sagt mir, das geht nicht). Geht das wirklich nicht? Für das write müssen die Strings doch zu Laufzeit verfügbar sein.
var x: (blau, gelb, rot)
habe, kann ich mit dem write-Befehl den Namen des aktuellen Werts ausgeben. Ich habe aber nicht gefunden, wie ich sonst im Programm auf den String-Wert direkt zugreifen kann (und ChatGPT sagt mir, das geht nicht). Geht das wirklich nicht? Für das write müssen die Strings doch zu Laufzeit verfügbar sein.
Re: Name von Aufzähltypen
Code: Alles auswählen
var x: (blau, gelb, rot);
S:String;
begin
WriteStr(S,gelb);
Caption:=S;
end;
-
- Beiträge: 963
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Name von Aufzähltypen
Hierfür ist das Str-Intrinsic da.braunbär hat geschrieben: Do 23. Jan 2025, 17:08 Wenn ich einen Aufzähltyp
var x: (blau, gelb, rot)
habe, kann ich mit dem write-Befehl den Namen des aktuellen Werts ausgeben. Ich habe aber nicht gefunden, wie ich sonst im Programm auf den String-Wert direkt zugreifen kann (und ChatGPT sagt mir, das geht nicht). Geht das wirklich nicht? Für das write müssen die Strings doch zu Laufzeit verfügbar sein.
Code: Alles auswählen
var
x: (blau, gelb, rot);
s: String;
begin
Str(gelb, s);
Writeln(s);
end.
FPC Compiler Entwickler
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: Name von Aufzähltypen
Danke! Ich habe mir ja gedacht, dass ChatGPT da falsch liegt.
Man darf dem auch nicht alles glauben
Man darf dem auch nicht alles glauben

- Niesi
- Lazarusforum e. V.
- Beiträge: 596
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Name von Aufzähltypen
.theo hat geschrieben: Do 23. Jan 2025, 17:25Code: Alles auswählen
var x: (blau, gelb, rot); S:String; begin WriteStr(S,gelb); Caption:=S; end;
Mir ist unklar, wofür das gut ist - was kann ich damit machen?
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 385
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: Name von Aufzähltypen
Moin!
Im Plus-Paket wird mir bei gleicher Fragestellung eine andere, ebenfalls funktionierende(!) Lösung ausgespuckt:
Ich kannte bisher keine der Lösungsmöglichkeiten, weder über GetEnumName() noch über Str() - also gut, dass es dieses Forum gibt.
Grüße, Jörg
Ich habe es gerade in der kostenlosen Version ausprobiert, da kriegt man tatsächlich keine Lösung angeboten.
Im Plus-Paket wird mir bei gleicher Fragestellung eine andere, ebenfalls funktionierende(!) Lösung ausgespuckt:
Code: Alles auswählen
uses TypInfo;
var x: (blau, gelb, rot);
x := gelb;
s := GetEnumName( TypeInfo(x), Ord(x) );
ShowMessage(s); // Writeln(s);

Grüße, Jörg
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: Name von Aufzähltypen
...
Zuletzt geändert von braunbär am Fr 24. Jan 2025, 09:13, insgesamt 1-mal geändert.
-
- Beiträge: 463
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 3.6, FPC 3.2.2
- CPU-Target: 64Bit
- Wohnort: Wien
Re: Name von Aufzähltypen
braunbär hat geschrieben: Fr 24. Jan 2025, 08:57Es gibt verschiedene Situationen, in denen man den Namen braucht. Ein Beispiel ist ein mehrsprachiges Programm, in dem eine Ausgabe zur Laufzeit automatisch in die richtige Sprache übersetzt werden soll. Oder, wie in dem Beispiel, das du zitierst, die Caption einer graphischen Komponente zu setzen, die am Bildschirm ausgegeben wird (Form, Label, Dropdown Box, was auch immer). Ich brauche es, weil ich für meine Logging Routine lieber den Klartext des Aufzähltyps als eine nichtssagende Nummer verwenden möchte.Niesi hat geschrieben: Fr 24. Jan 2025, 06:28Mir ist unklar, wofür das gut ist - was kann ich damit machen?theo hat geschrieben: Do 23. Jan 2025, 17:25Code: Alles auswählen
var x: (blau, gelb, rot); S:String; begin WriteStr(S,gelb); Caption:=S; end;
Oh! ich denke schon seit einiger Zeit daran, mir gelegentlich ein Abo zu besorgen. Vielleicht sollte ich das jetzt wirklich machen.Jorg3000 hat geschrieben: Fr 24. Jan 2025, 07:21 Im Plus-Paket wird mir bei gleicher Fragestellung eine andere, ebenfalls funktionierende(!) Lösung ausgespuckt:
Dem kann ich mich nur anschließen
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2822
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Name von Aufzähltypen
Dann ist dir ja jetzt hoffentlich klar, warum das Ding keine Empfehlung für Anfänger ist.braunbär hat geschrieben: Fr 24. Jan 2025, 02:02 Danke! Ich habe mir ja gedacht, dass ChatGPT da falsch liegt.
Man darf dem auch nicht alles glauben![]()
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- Zvoni
- Beiträge: 401
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Name von Aufzähltypen
Dann ist aber dieses Verfahren dafür eher ungeeignet. Dafür gibts doch Ressourcen.braunbär hat geschrieben: Fr 24. Jan 2025, 08:57 Es gibt verschiedene Situationen, in denen man den Namen braucht. Ein Beispiel ist ein mehrsprachiges Programm, in dem eine Ausgabe zur Laufzeit automatisch in die richtige Sprache übersetzt werden soll. Oder, wie in dem Beispiel, das du zitierst, die Caption einer graphischen Komponente zu setzen, die am Bildschirm ausgegeben wird (Form, Label, Dropdown Box, was auch immer).
Dafür ist es wiederum sehr geeignetIch brauche es, weil ich für meine Logging Routine lieber den Klartext des Aufzähltyps als eine nichtssagende Nummer verwenden möchte.
Zusammengefasst: Ein Aufzählungstyp ist im Prinzip eine "Abkürzung" um nicht unzählige Konstanten verwenden zu müssen wobei man gleichzeitig noch den Wertebereich einschränken/festlegen kann.
Es ist eine "Programmierhilfe" um den Quelltext "lesbarer" zu machen
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: Name von Aufzähltypen
Naja, hier beschreiben (blau, gelb, rot) ja eigentlich nur eine Aufzählung (wie Konstanten: 0,1,2), es sind keine Strings.Niesi hat geschrieben: Fr 24. Jan 2025, 06:28Mir ist unklar, wofür das gut ist - was kann ich damit machen?theo hat geschrieben: Do 23. Jan 2025, 17:25Code: Alles auswählen
var x: (blau, gelb, rot); S:String; begin WriteStr(S,gelb); Caption:=S; end;
Ord(gelb) gibt z.B. 1 zurück.
Wenn ich nun aber "menschenlesbar" wissen möchte was ausgewählt ist (z.B. fürs Logging), kann ich mit den genannten Methoden eben doch einen String 'gelb' erhalten.
Es grenzt an Magie!

- Niesi
- Lazarusforum e. V.
- Beiträge: 596
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Name von Aufzähltypen
Zvoni hat geschrieben: Fr 24. Jan 2025, 10:22Wenn ich das bereits gezeigte Beispiel nehme:braunbär hat geschrieben: Fr 24. Jan 2025, 08:57
...
Es ist eine "Programmierhilfe" um den Quelltext "lesbarer" zu machen
Da spare ich ne Menge Zeilen und habe es verständlicher, wenn ich gleichCode: Alles auswählen
var x: (blau, gelb, rot); s: String; begin Str(gelb, s); Writeln(s); end.
WriteLn('gelb');
eingebe ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
- Niesi
- Lazarusforum e. V.
- Beiträge: 596
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Name von Aufzähltypen
Hab Deine Antwort zu spät gesehen, musste gerade umsteigen ...theo hat geschrieben: Fr 24. Jan 2025, 11:14Naja, hier beschreiben (blau, gelb, rot) ja eigentlich nur eine Aufzählung (wie Konstanten: 0,1,2), es sind keine Strings.Niesi hat geschrieben: Fr 24. Jan 2025, 06:28Mir ist unklar, wofür das gut ist - was kann ich damit machen?theo hat geschrieben: Do 23. Jan 2025, 17:25Code: Alles auswählen
var x: (blau, gelb, rot); S:String; begin WriteStr(S,gelb); Caption:=S; end;
Ord(gelb) gibt z.B. 1 zurück.
Wenn ich nun aber "menschenlesbar" wissen möchte was ausgewählt ist (z.B. fürs Logging), kann ich mit den genannten Methoden eben doch einen String 'gelb' erhalten.
Es grenzt an Magie!![]()
Wozu ist das gut? Wenn die User 'gelb' lesen sollen, geht das dann mit Konstanten nicht viel einfacher?
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
- Zvoni
- Beiträge: 401
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Name von Aufzähltypen
Ich verstehe das eher so:Niesi hat geschrieben: Fr 24. Jan 2025, 11:32 Hab Deine Antwort zu spät gesehen, musste gerade umsteigen ...
Wozu ist das gut? Wenn die User 'gelb' lesen sollen, geht das dann mit Konstanten nicht viel einfacher?
Ein Array kann bekanntlich auch mit einem Aufzählungstype deklaliert werden
Code: Alles auswählen
Type
Farben = (gelb, blau, rot);
Var
arr:Array[Farben] Of String;
Code: Alles auswählen
//User hat deutsch
Writeln(arr[gelb]); //--> output = "gelb"
....
//User hat englisch
Writeln(arr[gelb]); //--> output = "yellow"
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.