Delphi-Quellcode:
type
TKnotenTyp = (ktAll, ktEx);
[...]
type
PDat = ^TDat;
TDat = record
KnotenTyp: TKnotenTyp;
FObject: TObject; // hier dann entweder TDatObjAll oder TDatObjEx
end;
Delphi-Quellcode:
procedure VSTSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream);
procedure VSTLoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream);
)
Das ganze Objekt à la .SaveTostream bzw .LoadFromStream abhandeln kann.
Schau dir mal die Demos vom Stammtisch an. Dort ist das (glaube ich) gezeigt.
Ansonsten ist es in den Source von diesen Artikel zu finden:
- Entwickler Magazin (Ausgabe: 03.08/14.04.2008) Artikel: Von Bäumen und Listen Teil 2 - Komponente VirtualStringTree im Detail
http://entwickler-magazin.de/zonen/m...e,254,p,0.html
Source Download
Den Record (TDAT, PDAT) mit Knotentyp kannst du weg lassen und direkt die Objekte einhängen (s.h. Demos).
Mit dem "is" Operator kannst du dann prüfen, um welches Objekttyp es sich handelt.
Durch die Vererbung aber nur bedingt notwendig.
Für die Serialisierung der Objekte bietet sich TPersistent als Vorfahre an.
In den OnLoad/OnSave kannst du das Object dann einfach Streamen (s.h. Beispiele).
Wenn du doch den Record verwenden willst:
FObject: TObject;
Warum definierst du da nicht deinen Basistyp?
Dann brauchst du nicht zu casten.
Mit Record wird das Streaming schwieriger.