PascalDragon hat geschrieben: So 26. Jan 2025, 16:23Bitte beachte, dass die Variante mit GetEnumName nicht geht, wenn das Enum Lücken hat, da es dann keine gültige Typinformation gibt und daher TypeInfo(<Bezeichner>) nicht kompiliert:Jorg3000 hat geschrieben: Fr 24. Jan 2025, 07:21 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.Code: Alles auswählen
uses TypInfo; var x: (blau, gelb, rot); x := gelb; s := GetEnumName( TypeInfo(x), Ord(x) ); ShowMessage(s); // Writeln(s);
![]()
Code: Alles auswählen
program tenum; {$mode objfpc} {$scopedenums on} uses TypInfo; type TTestEnum = (a, b, c); TTestEnum2 = (a = 1, b, c); var e: TTestEnum; e2: TTestEnum2; s: String; begin e := TTestEnum.b; e2 := TTestEnum2.b; Str(e, s); Writeln(s); Str(e2, s); Writeln(s); s := GetEnumName(TypeInfo(e), Ord(e)); Writeln(s); // error: No type info available for this type {s := GetEnumName(TypeInfo(e2), Ord(e2)); Writeln(s);} end.
Das habe ich jetzt mal versucht anzuwenden - ich bekomme es nicht hin ...
Was mache ich in der
Code: Alles auswählen
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
aStr: string;
aEnum: tShiftState;
begin
Label2.Caption := '';
Label3.Caption := '';
Label4.Caption := '';
Label5.Caption := '';
//aEnum := tShiftState.ssShift;
//aEnum := ssShift;
//aStr := GetEnumName(TypeInfo(tShiftState.aEnum), Shift);
im auskommentierten Bereich falsch?