![]() |
VirtualTreeView: Zugriff auf einzelnen Node
Hallo!
Ich habe eine kleine Frage bezüglich der VirtualTreeView-Komponente (bzw. des VST): Und zwar gibt es ja bei der normalen TreeView und auch bei der ListView folgende Möglichkeit:
Delphi-Quellcode:
Zumindest so in etwa.
for i:=0 to ListView.Items.Count-1 do begin
ShowMessage(ListView.Items[i].Caption); end; Allerdings habe ich bisher noch keine Möglichkeit gefunden, wie ich was vergleichbares auch mit der VST machen kann. :( Hat jemand einen Tipp? Danke & hf MCXSC |
Re: VirtualTreeView: Zugriff auf einzelnen Node
Hi,
Versuchs mal mit GetFirst, GetNext(), GetFirstChild() usw. Um an die hinterlegten Daten Daten zu kommen benutzt du GetNodeData(). |
Re: VirtualTreeView: Zugriff auf einzelnen Node
Ja, das habe ich ja schon. Aber auch das liefert mir nicht den direkten Zugriff auf einen bestimmten Node (z.B. den vierten Node in der Liste, o.ä.)
|
Re: VirtualTreeView: Zugriff auf einzelnen Node
welches ist denn der 4. Knoten? Muss die Liste dazu aufgeklappt oder zugeklappt sein?
|
Re: VirtualTreeView: Zugriff auf einzelnen Node
Hi
Delphi-Quellcode:
NodeX := Tree.FocusedNode.FirstChild;
for I:=0 to Tree.FocusedNode.ChildCount-1 do begin if not Assigned(NodeX) then Exit; TreeData := Tree.GetNodeData(NodeX); // do something with TreeData here <- NodeX := Tree.GetNextSibling(NodeX); end; |
Re: VirtualTreeView: Zugriff auf einzelnen Node
Hi,
So wie du das möchtest geht das im VT nicht, zumindest nicht direkt. IMO geht das nur wenn du alle Nodes durchsuchst und dir im TreeData einen eigenen eindeutigen Bezeichner für den aktuellen Node anlegst und abfragst. |
Re: VirtualTreeView: Zugriff auf einzelnen Node
Ja, das es nur so geht, ist mir schon klar...
Aber wie kann ich denn die kompletten Node in der VST durchlaufen (von Index 0 an; also ohne das was ausgwählt ist, oder sonst was), von diesem übereinstimmenden den Index zurückgeben und den jeweiligen Node vorselektieren? Ich bekomm es einfach nicht hin... :( |
Re: VirtualTreeView: Zugriff auf einzelnen Node
So, wie ich nun den Index des Node herausbekomme, weiß ich. Ich habs nun so gelöst (hab "TotalCount" gefunden :)):
Delphi-Quellcode:
Aber nun stehe ich vor folgender Frage:
function FindeEintrag(Titel: String): Integer;
var Data: PTreeData; Node: PVirtualNode; i: Integer; begin with MainFrm do begin Node := VSTListe.GetFirst; for i:=0 to VSTListe.TotalCount-1 do begin Data := VSTListe.GetNodeData(Node); if Data.Titel= Titelthen begin Result := Node.Index; Exit; end else Node := VSTListe.GetNext(Node); end; end; end; Wie kann ich diesen Node nun vorselectieren? |
Re: VirtualTreeView: Zugriff auf einzelnen Node
Fosusieren mit
focusednode:=node; <dein node> oder Selectieren mit SelectNodes(node,node,false); |
Re: VirtualTreeView: Zugriff auf einzelnen Node
hier ist eine Lösung die auch gleich Zwischenergebnisse überprüft:
Delphi-Quellcode:
Fokussieren des Nodes:
function GetNodeByTitle(Titel: String): PVirtualNode;
var Data: PTreeData; Node: PVirtualNode; begin Result := nil; with MainFrm do begin Node := VSTListe.GetFirst(); while Assigned(Node) and (Result = nil) do begin Data := VSTListe.GetNodeData(Node); if Assigned(Data) and (Data.Titel= Titel) then Result := Node; Node := VSTListe.GetNext(Node); end; end; end;
Delphi-Quellcode:
procedure Foo();
var MyNewFocusedNode: PVirtualNode; begin MyNewFocusedNode := GetNodeByTitle('bla'); if Assigned(MyNewFocusedNode) then VSTListe.FocusedNode := MyNewFocusedNode; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz