Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

Re: XMLSerialisierer gefunden !!!

  Alt 14. Feb 2009, 14:04
Zitat von Muetze1:
TPersistent muss nicht sein, man kann auch eigene Klasse ab TObject dazu bringen, wenn der Compilerschalter {$M+} vor dem Block der Properties und {$M-} dahinter angegeben wird. Dies schaltet die Generierung der RTTI für den Bereich ein. Mehr macht TPersistent grundlegend auch nicht. Aber private & protected - ich bin mir nicht sicher, aber diese sollten trotzdem nicht funktionieren - aber ab public sollte es klappen.
Public properties kann man mit RTTI leider nicht setzen. Kleines Beispielprgroamm:

Delphi-Quellcode:
program ExRTTI;

{$APPTYPE CONSOLE}

uses
  SysUtils, TypInfo, Classes;

type
  {$M+} {$TYPEINFO ON} {$METHODINFO ON}
  TFoo = class(TObject)
  private
    FBar: string;
  public
    property Bar: string read FBar write FBar;
  end;

var
  Foo: TFoo;
  PropInfo: PPropInfo;
  TypeKind: TTypeKind;

begin
  Foo := TFoo.Create;
  Foo.Bar := 'boo';

  { Get info record for Bar property }
  PropInfo := GetPropInfo(Foo, 'Bar');

  { If property exists, set value to test }
  if Assigned(PropInfo) then
  begin
    SetStrProp(Foo, PropInfo, 'test');
  end;

  WriteLn('Foo.Bar=' + Foo.Bar);
  ReadLn;
end.
Sobald man public in published ändert, kann die Property Bar gesetzt werden. {$TYPEINFO ON} {$METHODINFO ON} braucht man dazu auch nicht anzugeben. (Delphi 2009)
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat