1. Home
  2. Computing & Technology
  3. Delphi Programming
Get TreeView Node By Text - Part 2
How to locate (search and select) a TreeView node given by the parent node and the searched node text.
 More of this Feature
• Part 1
 Join the Discussion
"Post your views, comments, questions and doubts to this article."
Discuss!
 Related Resources
• VCL Using articles
• Beginners Delphi Section

Intro...If you look twice, you'll see something is missing: the code will find the FIRST node given by AText! What if you want to search for a node at the same level as the calling node - where this calling node is also provided to the function!...

The above text issued a challenge to enhance the TreeView search algorithm introduced in the part 1 of this article: Get TreeView Node By Text.

Remember, we had a treeview component "filled" with nodes. The problem was to search (locate and make visible) the treeview node in a function that receives the node text as the parameter.

Look the picture below, we have a node with the caption "Button" under the "Standard" node. If we are to have the "Button" node below (as a child node) the "Additional" node, the function will find the first "Button" - the one under "Standard".

What we now want, is to tell the function to search for "Button" under "Additional"...

Delphi : Get TreeView Node by Text

We enhance the GetNodeByText function by adding one more parameter - the "InNode" node.

function GetNodeByText
  (ATree : TTreeView; InNode : TTreeNode; 
   AValue:String; AVisible:boolean) : TTreeNode;
var
  NodeText : String;
  NextNode : TTreeNode;
begin
  Result := nil;
  NextNode := InNode.GetFirstChild;
  while NextNode <> nil do
  begin
    NodeText := NextNode.Text;
    if UpperCase(NodeText) = UpperCase(AValue) then
    begin
       NextNode.Selected := AVisible;
       Break;
    end
    else
      NextNode := NextNode.getNextSibling;
  end; //while
  Result := NextNode;
end;

The function simply iterates through all the first level child nodes of the provided "InNode" node and looks for a node labeled AValue.

The code that runs the 'Find Node' button OnClick event is slightly modified. The second parameter is the "root" node for the search - for example the selected node.

procedure TForm1.Button1Click(Sender: TObject);
var
  tn : TTreeNode;
begin
   tn:=GetNodeByText(TreeView1, TreeView1.Selected,
                     Edit1.Text,CheckBox1.Checked);
   if tn = nil then
     ShowMessage('Not found!')
   else
     TreeView1.SetFocus;
end;

That's it. If you have any questions please use the Delphi Programming Forum.

Explore Delphi Programming
About.com Special Features

Stay connected and entertained with reviews on tips on the latest HDTVs, cellphones and more. More >

Easy ways to connect two computers for networking purposes. More >

  1. Home
  2. Computing & Technology
  3. Delphi Programming

©2009 About.com, a part of The New York Times Company.

All rights reserved.