Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi VirtualTreeView: Zugriff auf einzelnen Node (https://www.delphipraxis.net/102435-virtualtreeview-zugriff-auf-einzelnen-node.html)

MCXSC 28. Okt 2007 23:07


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:
for i:=0 to ListView.Items.Count-1 do begin
 ShowMessage(ListView.Items[i].Caption);
end;
Zumindest so in etwa.

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

C.Schoch 28. Okt 2007 23:32

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().

MCXSC 28. Okt 2007 23:36

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.ä.)

generic 29. Okt 2007 10:49

Re: VirtualTreeView: Zugriff auf einzelnen Node
 
welches ist denn der 4. Knoten? Muss die Liste dazu aufgeklappt oder zugeklappt sein?

Wishmaster 29. Okt 2007 11:27

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;

C.Schoch 29. Okt 2007 18:19

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.

MCXSC 1. Nov 2007 21:31

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... :(

MCXSC 1. Nov 2007 21:54

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:
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;
Aber nun stehe ich vor folgender Frage:

Wie kann ich diesen Node nun vorselectieren?

hermannhass 1. Nov 2007 23:48

Re: VirtualTreeView: Zugriff auf einzelnen Node
 
Fosusieren mit
focusednode:=node;
<dein node>
oder Selectieren mit
SelectNodes(node,node,false);

semo 2. Nov 2007 00:32

Re: VirtualTreeView: Zugriff auf einzelnen Node
 
hier ist eine Lösung die auch gleich Zwischenergebnisse überprüft:
Delphi-Quellcode:
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;
Fokussieren des Nodes:

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 08:07 Uhr.
Seite 1 von 2  1 2      

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