Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Komponenten(struktur) serialisieren mit WriteComponentResFile?

  Alt 8. Dez 2013, 22:30
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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat