Hallo zusammen,
ich spiele grade mit
WriteComponentResFile
rum und würde gerne eine Instanz von TComponent serialisieren. Soweit so gut. Erstelle ich mir folgende Klasse, kann ich deren Eigenschaften wunderbar speichern und auch wieder laden:
Delphi-Quellcode:
type
TMyRootClass = class(TComponent)
private
FX: Integer
published
property X: Integer read FX write FX;
end;
Nun möchte ich aber einen Schritt weiter gehen und (im Style vom Formulardesigner) eine Klasse mit diversen Child Komponenten speichern. Bei meinen Tests habe ich verschiedene Szenarien ausprobiert:
Delphi-Quellcode:
type
TMyRootClass = class(TComponent)
published
A1: TComponent;
end;
{ ... }
R := TMyRootClass.Create(nil);
A := TComponent.Create(R);
A.Name := 'A1'; { <-- sorgt indirekt dafür, dass die published property "A1" des Owners (R) auf die Instanz A gesetz wird }
Funktioniert NICHT
Delphi-Quellcode:
type
TMyRootClass = class(TWinControl)
published
A1: TWinControl;
end;
{ ... }
R := TMyRootClass.Create(nil);
A := TWinControl.Create(R);
A.Name := 'A1'; { <-- sorgt indirekt dafür, dass die published property "A1" des Owners (R) auf die Instanz A gesetz wird }
Funktioniert NICHT
Delphi-Quellcode:
type
TMyRootClass = class(TWinControl)
published
A1: TWinControl;
end;
{ ... }
R := TMyRootClass.Create(nil);
A := TWinControl.Create(R);
A.Name := 'A1'; { <-- sorgt indirekt dafür, dass die published property "A1" des Owners (R) auf die Instanz A gesetz wird }
A.Parent := R;
FUNKTNIONIERT
Jetzt meine Frage:
Wie entscheidet Delphi, ob ein published Feld, welches von TComponent ableitet serialisiert wird, oder nicht? Scheinbar werden die Felder standardmäßig nur gesichert, wenn die Komponente im Feld von TWinControl ableitet UND den Parent gesetzt hat.
Kann ich dieses Verhalten in meinen von TComponent abgeleiteten Klassen beeinflussen (ich kann in meinem Falle nicht von TWinControl ableiten)?
Bin dankbar für jede Antwort
Zacherl