Hallo,
ich habe eine Klasse mit mehreren Enum-Member (verschiedene Enums). Von dieser Klasse will ich per
RTTI die Member auslesen, und falls es ein Enum ist, die Enum-Werte als Strings auslesen. Ich kann die Member auslesen und habe auch die Lösung für das Auflisten von Enums, aber ich bekomme die beiden nicht zusammen.
Dieser Code funktioniert zum Auslesen der Enums:
Delphi-Quellcode:
procedure TForm5.ListEnum(a: PTypeInfo);
var
i:Integer;
TypeData: PTypeData;
begin
TypeData:=GetTypeData(a);
for I := TypeData.MinValue to TypeData.MaxValue do
memo1.LineS.Add(GetEnumName(a,i));
end;
mit
RTTI versuche ich was in der Richtung:
Delphi-Quellcode:
procedure TForm5.Button2Click(Sender: TObject);
var
context: TRttiContext;
aType: TRttiType;
aProperty : TRttiProperty;
typedata: PTypeData;
begin
aType:=context.GetType(TTestKlass);
for aProperty in aType.GetProperties do
begin
// Hier wird im Original geprüft, ob die Property ein bestimmtes Attribut besitzt, das meine Enums haben
// wenn ja, dann hier weiter
TypeData:=aProperty.PropertyType......
// Dann sollen hier die Strings des Enum verarbeitet werden
end;
end;
TRttiType hat wohl eine Variable TypeData, aber nur private. Muss ich irgendwas mit einem Class-Helper basteln, um auf den private-Member zuzugreifen, oder gibt es eine bessere Lösung?