Einzelnen Beitrag anzeigen

generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#3

AW: VirtualStringTree Objekte speichern

  Alt 12. Nov 2010, 09:56
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott

Geändert von generic (12. Nov 2010 um 10:04 Uhr)
  Mit Zitat antworten Zitat