Ich spiele gerade ein wenig mit dem
RTTI und wollte alle Eigenschaften eines TForm ausgeben. Dabei bekomme ich bei der Eigenschaft 'ComObject' einen EComponentError mit der Medung 'TForm1' wurde nicht als
COM-Klasse registriert.
Folgenden Code führe ich auf einer MainForm mit einem TMemo aus:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
ctx: TRttiContext;
lty: TRttiType;
lprops: TArray<TRttiProperty>;
lprop: TRttiProperty;
lval: TValue;
begin
IntValue := 1234;
StrValue := 'Hello world';
//
ctx := TRttiContext.Create;
lty := ctx.GetType(ClassType);
lprops := lty.GetProperties;
for lprop in lprops do
begin
if lprop.IsReadable then
begin
lval := lprop.GetValue(Self); // EComponentError bei ComObject
memo1.lines.Add(format('%s = %s', [lprop.Name, lval.ToString]));
end
else
memo1.lines.Add(format('%s', [lprop.Name]));
end;
ctx.Free;
end;
Gibt es eine Möglichkeit den Fehler zu vermeiden, bzw. sollte lval nicht einfach (empty) zurückliefern?