Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Virtual Treeview: Erzeugung der Baumstruktur (https://www.delphipraxis.net/86178-virtual-treeview-erzeugung-der-baumstruktur.html)

DGL-luke 10. Feb 2007 13:48


Virtual Treeview: Erzeugung der Baumstruktur
 
Hallo,

ich dachte, wenn ich OnInitNode und OnInitChildren anständig verarbeite und einmal(!) VST.AddChild(nil) aufrufe, sollte der rest von alleine gehen...

tut es aber nicht.

Wie macht man das?

bigg 10. Feb 2007 14:02

Re: Virtual Treeview: Erzeugung der Baumstruktur
 
Du musst der VST mittteilen, wieviel Speicher pro Knoten reserviert werden soll.

C.Schoch 10. Feb 2007 16:28

Re: Virtual Treeview: Erzeugung der Baumstruktur
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Um dem VST die Datengröße deines Records mitzuteilen gibt es zwei Möglichkeiten,
1. Im OnCreate der Form, VST.NodeDataSize := SizeOf({DatenRecord});
2. Im OnGetNodeDataSize.

Mit der zweiten Variante ist es auch möglich verschiedengroße Records zu haben.

Mal ein Bsp. wie man eine Baumstruktur erzeugt
Delphi-Quellcode:
var
  Data : PTreeData;
  Node : PVirtualNode;
begin
// "Data" mit Daten füllen
Node := VST.AddChild(nil, Data); // Node Ebene 0 (Wurzel)
// "Data" mit anderen Daten füllen
VST.AddChild(Node, Data); // neuer SubNode Ebene 1 (Stamm)
// "Data" mit anderen Daten füllen
Node := VST.AddChild(Node, Data); // neuer SubNode Ebene 1 (Stamm)
// "Data" mit anderen Daten füllen
VST.AddChild(Node, Data); // neuer SubNode Ebene 2 (Ast)
//usw...
end;
In Data liegen die Daten die ein Node enthällt

Edit: Ich hatte da mal was grob zusammengezimmert sind ein par Fehler drin zeigt dir vieleicht aber wies geht

DGL-luke 10. Feb 2007 17:25

Re: Virtual Treeview: Erzeugung der Baumstruktur
 
Hmm.... die datasize hab ich zugewiesen...

@C.Schoch: Das mit dem AddChild ist doch die nicht empfohlene Methode, oder? Ich dachte, es reicht, nur OnInitNode und OnInitChildren zu implementieren.

Ich will nicht noch mehr schrieben, mein Code ist kompliziert genug :(

EDIT: danke, eine zeile fehlte:

Delphi-Quellcode:
InitialStates := InitialStates + [ivsHasChildren];
Jetzt krieg ich zwar n listenerror, aber egal. endlich gehts weiter :)

C.Schoch 11. Feb 2007 14:53

Re: Virtual Treeview: Erzeugung der Baumstruktur
 
Hi,

In der Hilfe steht dazu:
Zitat:

Q: How to add a node to the tree?

A: The technique is very similar to the one you used with the standard tree view. The only difference is that you fill the node's data after the insertion of the node

E:

var
Node: PVirtualNode;
Node := VirtualStringTree1.AddChild(nil); // Adds a node to the root of the Tree.
Node := VirtualStringTree1.AddChild(ParentNode); // Adds a node as the last child of the given node.
Node := VirtualStringTree1.InsertNode(Node, amInsertBefore); // Inserts a node as sibling just before the given node.


Alternatively you can use the OnInitChildren event. This event is used when a node is marked as having child nodes and these child nodes are somehow about to be accessed (like iteration, expanding, display etc.).
Scheint egal zu sein was man nutzt, und ich ändere da nichts mehr es war ein harter Kampf bis es so lief.
Da hast du recht, Das Virtual Tree ist doch recht kompliziert aber der Funktionsumfang dieser Komponente macht dies wieder wett.

DGL-luke 11. Feb 2007 15:05

Re: Virtual Treeview: Erzeugung der Baumstruktur
 
Jop,

bei mir klappts jetzt, indem ich die RootNodes direkt erzeuge und den Rest über OnInitChildren.

(naja, klappen ist zu viel gesagt)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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