Einzelnen Beitrag anzeigen

Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#1

RTTI und EComponentError beim Auslesen der Eigenschaften

  Alt 31. Jul 2018, 23:53
Delphi-Version: 5
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?
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat