AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree Objekte speichern

Ein Thema von Berni68 · begonnen am 11. Nov 2010 · letzter Beitrag vom 12. Nov 2010
Antwort Antwort
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#1

VirtualStringTree Objekte speichern

  Alt 11. Nov 2010, 20:32
Hallo zusammen,

ich bastel gerade mit einem VST an einer Baumstruktur, in der verschiedene Objekte an Nodes angehängt sind. In etwa so:

Delphi-Quellcode:
type
  TKnotenTyp = (ktAll, ktEx);
type
  TDatObjAll = class(TObject) // <- gibt es hier einen besseren Vorfahr als TObject??
    private
      Zahl1: integer;
      String1: string;
      String2: string;
  end;
type
  TDatObjEx = class(TDatObjAll)
    private
      String3: string;
  end;
type
  PDat = ^TDat;
  TDat = record
    KnotenTyp: TKnotenTyp;
    FObject: TObject; // hier dann entweder TDatObjAll oder TDatObjEx
  end;
Klappt soweit auch ganz gut.
Die Frage ist nun, ob es was geeigneteres als TDatObjAll = class(TObject)
gibt, daß man beim Speichern und Lesen des Nodes von Datei
(Ereignisse:
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.
Gibt es da eine geeignete Klasse?
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: VirtualStringTree Objekte speichern

  Alt 11. Nov 2010, 21:09
Ich denke den Streamreader/writer wirst Du selbst schreiben müssen, Du hast je keine Properties sondern Klassen, sonst könntest Du etwas in der Art machen:
http://delphi.about.com/od/windowssh...der-writer.htm
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
generic

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

AW: VirtualStringTree Objekte speichern

  Alt 12. Nov 2010, 08: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 09:04 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz