die Begeisterung hält sich ja erstaunlicherweise in Grenzen.
Na das werde ich mal versuchen mit einer neuen Version zu ändern
Man kann nette Dinge mit der
RTTI anstellen.
Zum Beispiel alle published Properties einfach von einem Object ins andere kopieren.
(man beachte, dass kein assign notwendig ist)
P.S. es gibt eine neue Version vom Original, die modifzierte befindet sich wieder im Anhang
folgendene Definition....
type
Delphi-Quellcode:
TMyEnum = (meNotset, meEnum1, meEnum2);
TInClass = class(TPersistent)
private
FString : string;
published
property StringValue : String read FString write FString;
end;
//==============================================================================
TMyClass = class(TPersistent)
private
FInObj : TInClass;
FString : string;
FNewDouble: Double;
FEnum: TMyEnum;
FTop: Integer;
published
constructor create;
destructor destroy; override;
function Show : string;
property EnumValue : TMyEnum read FEnum write FEnum;
property DoubleValue : Double read FNewDouble write FNEwDouble;
property StringValue : String read FString write FString;
property InObject : TInClass read FInObj write FInObj;
property Top : Integer read FTop write FTop;
end;
implementation
//==============================================================================
{ TMyClass }
//==============================================================================
constructor TMyClass.create;
begin
inherited create;
// FInObj := TInClass.Create(self);
// FInObj.SetSubComponent(true);
FInObj := TInClass.Create;
end;
//==============================================================================
destructor TMyClass.destroy;
begin
FInObj.Free;
inherited;
end;
//==============================================================================
function TMyClass.Show: string;
begin
ShowMessage(
'EnumValue: ' + GetEnumName(TypeInfo(TMyEnum ) , integer(Self.FEnum)) + #13#10 +
'StringValue: ' + self.StringValue + #13#10 +
'DoubleValue: ' + FloatToStr(self.DoubleValue) + #13#10 +
'TopValue: ' + IntToStr(self.Top) + #13#10 +
'InnerClass Value: '+ self.InObject.StringValue);
end;
das ist der Test ...
Delphi-Quellcode:
procedure TfrmXMLSerialisierer.btnCopyPuPropClick(Sender: TObject);
var
myObject : TMyClass;
myCopy : TMyClass;
begin
MyObject := TMyClass.Create;
myObject.Top := 10;
myObject.Show;
// "Top" Property von Form kopieren (ist die einzigste gemeinsame Property"
// man beachte, es gibt nirgendwo eine Assign Procedure
myObject.CopyPupProperiesFrom(self);
MyObject.StringValue := DateTimeToStr(Now);
MyObject.EnumValue := meEnum1;
MyObject.DoubleValue := 12345.67;
MyObject.InObject.StringValue := 'Inner Class';
myObject.Show;
// neues Object (Kopie)
myCopy := TMyClass.create;
myObject.CopyPupProperiesTo(myCopy);
myCopy.Show;
// speichern //
MyObject.SaveToXML('MyClass.xml');
MyObject.Free;
// Laden
MyObject := TMyClass.Create;
MyObject.LoadFromXML('MyClass.xml');
myObject.Show;
MyObject.Free;
end;
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.