procedure TForm1.EnableNodeEditing;begin // Allow users to edit node text Tree1.AllowEdit := True; // Or start editing programmatically Tree1.StartEditing(Tree1.Roots[0]);end;procedure TForm1.Tree1StartEditing(Shape: TTreeNodeShape; var AllowEditing: Boolean);begin // Control which nodes can be edited AllowEditing := Shape.Level > 0; // Only children, not rootsend;
procedure TForm1.Tree1SelectShape(Sender: TTreeNodeShape);begin // Respond to node selection ShowMessage('Selected: ' + Sender.SimpleText); // Access selected nodes if Tree1.Selected.Count > 0 then begin // Get first selected node var Node := Tree1.Selected.First; Panel1.Caption := Node.SimpleText; end;end;
When adding many nodes, use BeginUpdate and EndUpdate:
procedure TForm1.CreateLargeTree;var i, j: Integer; Root, Child: TTreeNodeShape;begin Tree1.BeginUpdate; try // Add 500 root nodes for i := 0 to 499 do begin Root := Tree1.AddRoot('Node ' + IntToStr(i)); // Add 10 children to each for j := 0 to 9 do begin Child := Root.Add('Child ' + IntToStr(j)); end; end; finally Tree1.EndUpdate; // Refresh once at the end end; ShowMessage('Added ' + IntToStr(Tree1.Items.Count) + ' nodes');end;
This approach can add 20,000+ nodes in under 100 milliseconds.
procedure TForm1.ProcessAllNodes;var i: Integer; Node: TTreeNodeShape;begin for i := 0 to Tree1.Items.Count - 1 do begin Node := Tree1.Items[i]; // Process node Node.Font.Color := clBlue; end;end;
var Node: TTreeNodeShape;begin // Find by text Node := Tree1.Items.Find('Search Term'); if Assigned(Node) then Node.Selected := True; // Find by partial text Node := Tree1.Items.Find('Partial', True);end;
procedure TForm1.ExploreHierarchy(Node: TTreeNodeShape);var i: Integer;begin // Parent if Assigned(Node.Parent) then ShowMessage('Parent: ' + Node.Parent.SimpleText); // Children for i := 0 to Node.Count - 1 do begin ShowMessage('Child: ' + Node.Children[i].SimpleText); end; // Root nodes for i := 0 to Tree1.Roots.Count - 1 do begin ShowMessage('Root: ' + Tree1.Roots[i].SimpleText); end;end;
procedure TForm1.DeleteSelectedNodes;begin // Delete all selected nodes Tree1.Selected.Clear; // Or delete individually // Delete specific node (and all children) if Assigned(Tree1.Roots[0]) then Tree1.Roots[0].Free;end;