Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualStringTree: Wie füge ich meine Daten am besten ein? (https://www.delphipraxis.net/106393-virtualstringtree-wie-fuege-ich-meine-daten-am-besten-ein.html)

guidok 10. Jan 2008 06:00


VirtualStringTree: Wie füge ich meine Daten am besten ein?
 
Hallo!

Ich habe in einer DB Daten in folgendem Format vorliegen:

10
10-10
10-10-100
10-10-200
10-20
10-20-100
...usw.

Das geht bis zu fünf Ebenen tief und ist ein idealer Fall für eine Baumdarstellung, aber wie bekomme ich die Daten am sinnvollsten in den Tree? Grundsätzlich weiß ich wie es funktioniert, es geht also nicht um eine grundlegende Einführung in die VST-Kompo. Mein Datenrecord existiert und ich kann auch Daten einfügen.

Delphi-Quellcode:
Data := vstListview.GetNodeData(vstListview.AddChild(nil)));
Data^.TP := TP;
Ich könnte es mir jetzt einfach machen und davon ausgehen, dass die Reihenfolge, in der die Daten angeordnet sind immer korrekt ist und anhand der Länge des Strings ermitteln, ob ich einen neuen Unterknoten brauche oder wieder in die oberste Ebene wechseln muss. Das finde ich aber nicht so gut.

Der zweite Weg wäre VOR dem Einfügen den entsprechenden übergeordneten Knoten zu finden, z.B. für 10-20-200 ist der übergeordnete Knoten 10-20. Aber wie suche ich im VST einen Knoten?

Ich steh hier ein wenig auf der Leitung und hoffe jemand von euch kann mich auf den rechten Weg zurückführen.

Gruß, guido

semo 10. Jan 2008 06:25

Re: VirtualStringTree: Wie füge ich meine Daten am besten ei
 
du startest beim rootnode.firstschild und durchläufst mit einer while schleife alle nodes.
zu jedem node holst du dir das data record wo du die caption hinterlegt hast und überprüfst ob diese caption deiner gesuchten entspricht. wenn ja dann hast du die abbruchbedingung für deine schleife. wenn nein, dann gehe weiter zum nächsten knoten.

pseudocode:

Delphi-Quellcode:
CaptionFound := False;
while Assigned(Node) and (not CaptionFound) do
begin
  NodeData := vst.GetNodeData(Node);
  if Assigned(NodeData) then
    CaptionFound := (NodeData.Caption = SearchedCaption);

  Node := vst.getNextNode(Node);
end;

guidok 10. Jan 2008 06:42

Re: VirtualStringTree: Wie füge ich meine Daten am besten ei
 
Ja klar, ich gehe alle Knoten von Anfang an durch. Aber: Gibt es eine Methode bei VST, mit der ich alle Knoten der Reihe nach abarbeiten kann. Ich kenne die Komponente noch nicht besonders gut und habe jetzt erst mal nur die Methode GetNext entdeckt laut Hilfe "Next node in the tree with initialization", was auch immer das bedeutet.
Ich bräuchte etwas, dass von Root ausgehend den nächsten Knoten auswählt bis in die unterste Ebene und beim nächsten Aufruf wieder den nächsten Knoten in der nächst höheren Ebene.

z.B.

10 (Next)
10-10 (Next)
10-10-100 (Next)
10-10-200 (Next)
10-20 (Next)
10-20-100 (Next)
20 (Next)
usw.

semo 10. Jan 2008 06:44

Re: VirtualStringTree: Wie füge ich meine Daten am besten ei
 
genau das macht vst.getNextNode(Node)

die knoten sind intern mit einem absoluteindex versehen.
wenn du dir den mal mit ausgeben lässt siehst du dass vst.getnextnode(Node) immer zum nächsten absoluteindex springt.

generic 10. Jan 2008 08:31

Re: VirtualStringTree: Wie füge ich meine Daten am besten ei
 
Den Tree durchlaufen kannst du am schnellsten/besten mit der funktion iteratesubtree.

die funktion habe ich beim 2. stammtisch erklärt.
video's und source sind hier im forum.

guidok 10. Jan 2008 13:48

Re: VirtualStringTree: Wie füge ich meine Daten am besten ei
 
Danke an alle! Mit IterateSubtree funktioniert es hervorragend.


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