Iterating over nodes and its childs and modify data
Asked Answered
I

1

10

I'm using Virtual Tree List for delphi 2009. I've created a tree with data such as:

type
  PTreeData = ^TTreeData;
  TTreeData = record
    FCaption: String;
    FPath: String;
  end;

I want to iterate over all elements but in specific order. I need to acquire first top level node, and then iterate over all of its children and modify FPath field. When I'm done with its children I want to get another top level node, and so on.

First of all I don't know how to itterate over top level nodes.

Thanks in advance for any tips on this

Informative answered 5/3, 2012 at 13:22 Comment(1)
Not appropriate for this particular question, but see also the IterateSubtree method.Ettaettari
I
12

Here's how to iterate top level nodes. Please note (as Smasher left in his comment) that nodes are being initialized if needed by using GetFirst and GetNextSibling what might slow down the iteration a little bit. However you can use the GetFirstNoInit and GetNextNoInit functions (if you have nodes already initialized) and you might get better performance.

procedure TForm1.Button1Click(Sender: TObject);
var
  Data: PTreeData;
  Node: PVirtualNode;
begin
  Node := VirtualStringTree1.GetFirst;
  while Assigned(Node) do
  begin
    Data := VirtualStringTree1.GetNodeData(Node);
    // here you can access your data
    Node := VirtualStringTree1.GetNextSibling(Node);
  end;
end;
Indic answered 5/3, 2012 at 13:35 Comment(2)
It almost works :) Instead GetNext I need to use GetNextSibling to iterate over top level nodes only. Plz correct this so I could accept your answer. And thanks! :)Papua
But Jacek, your question explicitly says you need to iterate over all the top-level nodes and their children.Ettaettari

© 2022 - 2024 — McMap. All rights reserved.