Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterating over nodes and its childs and modify data

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

like image 745
Jacek Kwiecień Avatar asked Mar 05 '12 13:03

Jacek Kwiecień


1 Answers

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;
like image 135
TLama Avatar answered Sep 28 '22 08:09

TLama