Registriert seit: 26. Mai 2004
Ort: Nürnberg
272 Beiträge
Delphi 11 Alexandria
|
AW: Automatischer Setter/Getter für Aufzählungs-Variablen via RTTI?
17. Okt 2017, 15:38
Ungetestet EntHTMLisiert und GeShowMessaged
Delphi-Quellcode:
uses
Classes,
TypInfo;
{ Die Prozedur liefert Informationen zum übergebenen Aufzählungstypen. }
procedure TRTTI.GetEnumTypeInfo(AClass: TObject);
begin
GetEnumTypeInfo(PTypeInfo(AClass));
end;
{ Die Prozedur liefert Informationen zum übergebenen Aufzählungstypen. }
procedure TRTTI.GetEnumTypeInfo(ATypeInfo: PTypeInfo);
var
OrdTypeData : PTypeData;
TypeNameStr : String;
TypeKindStr : String;
MinVal : Integer;
MaxVal : Integer;
i : integer;
begin
// TTypeData-Pointer holen
OrdTypeData := GetTypeData(ATypeInfo);
// Typnamen holen
TypeNameStr := ATypeInfo.Name;
// Typart als String holen
TypeKindStr := GetEnumName(TypeInfo(TTypeKind), Integer(ATypeInfo^.Kind));
// Niedrigsten und höchstmöglichen Wert holen
MinVal := OrdTypeData^.MinValue; // Kleinster Wert
MaxVal := OrdTypeData^.MaxValue; // Höchster Wert
// Type Name = TypeNameStr
// Type Kind = TypeKindStr
If ATypeInfo^.Kind in [tkInteger, tkChar, tkEnumeration, tkFloat, tkInt64] Then Begin
if (ATypeInfo^.Kind = tkEnumeration) And (UpperCase(TypeNameStr) <> 'WORDBOOL') then Begin
Try
// Eigentlich sollte man meinen, das MinVal kleiner als MaxVal ist,
If MinVal < MaxVal Then Begin
for i := MinVal to MaxVal do Begin
// Verbale Beschreibung = GetEnumName(ATypeInfo, i) // Also z. B. Hund
ShowMessage(GetEnumName(ATypeInfo, i));
End;
End Else Begin // ist es aber bei TOleEnum nicht
for i := MinVal Downto MaxVal do Begin
// Verbale Beschreibung = GetEnumName(ATypeInfo, i) // Also z. B. Hund
ShowMessage(GetEnumName(ATypeInfo, i));
End;
End;
Except
// Fehlerbehandlung
End;
End;
End;
end;
Oh danke! Das wär doch nicht nötig gewesen...
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
|
|
Zitat
|