![]() |
Komponenten(struktur) serialisieren mit WriteComponentResFile?
Hallo zusammen,
ich spiele grade mit
Delphi-Quellcode:
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:
WriteComponentResFile
Delphi-Quellcode:
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:
type
TMyRootClass = class(TComponent) private FX: Integer published property X: Integer read FX write FX; end;
Delphi-Quellcode:
:arrow: Funktioniert NICHT
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 }
Delphi-Quellcode:
:arrow: Funktioniert NICHT
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 }
Delphi-Quellcode:
:arrow: FUNKTNIONIERT
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; 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 |
AW: Komponenten(struktur) serialisieren mit WriteComponentResFile?
AFAIK musst du deine Klasse und auch die SubKlassen, wenn vorhanden, noch registrieren
Delphi-Quellcode:
Joar, siehe hier
initialization
RegisterClasses([TRootClass]); ![]() |
AW: Komponenten(struktur) serialisieren mit WriteComponentResFile?
|
AW: Komponenten(struktur) serialisieren mit WriteComponentResFile?
Danke euch, für eure Antwort!
Zitat:
Zitat:
Ich habe noch etwas weiter geforscht und glaube nun eine Lösung gefunden zu haben. TWinControl überschreibt die Methode
Delphi-Quellcode:
, um alle SubControls zurückzugeben. TCustomWindow überschreibt die Methode nochmal und fügt zusätzlich alle SubComponents hinzu.
GetChildren
Diese Funktion wird von Read/WriteComponentResFile indirekt aufgerufen, um zu ermitteln, welche Child Komponenten der Root besitzt :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz