Nodes
Node configuration
The NodesAppearance property on TTMSFNCTreeView controls the visual style of all nodes. Individual columns can override these defaults by setting UseDefaultAppearance = False on a TTMSFNCTreeViewColumn.
Adding, inserting, and removing nodes
Both collection-based and virtual modes are covered in Modes. The snippets here use collection-based mode.
// Start from a clean state
TreeView1.BeginUpdate;
TreeView1.ClearNodeList;
TreeView1.ClearNodes;
TreeView1.ClearColumns;
TreeView1.Columns.Add.Text := 'Column 1';
TreeView1.EndUpdate;
Add a root node:
var n: TTMSFNCTreeViewNode;
n := TreeView1.AddNode;
n.Text[0] := 'Root Node';
Add a child node:
var pn, child: TTMSFNCTreeViewNode;
pn := TreeView1.AddNode;
child := TreeView1.AddNode(pn); // child of pn
child.Text[0] := 'Child Node';
TreeView1.ExpandNode(pn);
Insert a node at a specific position:
TreeView1.InsertNode(1, nil); // insert at index 1 at root level
Remove nodes:
// By method
TreeView1.RemoveNode(TreeView1.FocusedNode);
// By freeing the collection item — same result
TreeView1.FocusedNode.Free;
// Remove all children of a node
TreeView1.RemoveNodeChildren(someParentNode);
// Remove all selected nodes
TreeView1.RemoveSelectedNodes;
Fixed vs variable node height
Fixed height (default)
All nodes share the same height, set by NodesAppearance.FixedHeight. Icons and text that exceed this height are clipped.
TreeView1.NodesAppearance.FixedHeight := 40;
Variable height
Set NodesAppearance.HeightMode to tnhmVariable to let each node height expand to fit its content (icon size or wrapped text). The NodesAppearance.VariableMinimumHeight sets the minimum height for scroll calculations.
procedure TForm1.SetupVariableHeight;
begin
TreeView1.BeginUpdate;
TreeView1.ClearNodeList;
TreeView1.ClearNodes;
TreeView1.ClearColumns;
TreeView1.Columns.Add.Text := 'Variable TreeView';
TreeView1.Columns[0].WordWrapping := True;
TreeView1.NodesAppearance.HeightMode := tnhmVariable;
TreeView1.EndUpdate;
end;
With word wrapping enabled, long text also drives the node height:
TreeView1.Columns[0].WordWrapping := True;
TreeView1.NodesAppearance.HeightMode := tnhmVariable;
Checkbox and radiobutton support
Each node column can display a checkbox or radiobutton independently via the CheckTypes property:
procedure TForm1.SetupCheckNodes;
var
n: TTMSFNCTreeViewNode;
I: Integer;
begin
TreeView1.BeginUpdate;
TreeView1.ClearNodeList;
TreeView1.ClearNodes;
TreeView1.ClearColumns;
TreeView1.Columns.Add.Text := 'Checkbox / radiobutton';
for I := 0 to 3 do
begin
n := TreeView1.Nodes.Add;
n.Text[0] := 'CheckBox ' + IntToStr(I);
n.CheckTypes[0] := tvntCheckBox;
if Odd(I) then
n.Checked[0] := True;
end;
for I := 0 to 3 do
begin
n := TreeView1.Nodes.Add;
n.Text[0] := 'Radiobutton ' + IntToStr(I);
n.CheckTypes[0] := tvntRadioButton;
if I = 2 then
n.Checked[0] := True;
end;
TreeView1.EndUpdate;
To use virtual mode for checkboxes, implement OnGetNodeCheckType and OnIsNodeChecked.
Toggle check state programmatically:
TreeView1.ToggleCheckNode(node, 0); // collection-based
TreeView1.CheckVirtualNode(virtualNode, 0); // virtual
Extended nodes
An extended node spans all columns and displays text from column 0 only. Extended nodes are not selectable or editable by default; this can be changed via NodesAppearance.ExtendedSelectable and NodesAppearance.ExtendedEditable.
Use extended nodes as section headers within a flat list:
// Extended nodes that span all columns
procedure TForm1.SetupExtendedNodes;
var
n, pn: TTMSFNCTreeViewNode;
I: Integer;
begin
TreeView1.BeginUpdate;
TreeView1.ClearNodeList;
TreeView1.ClearNodes;
TreeView1.ClearColumns;
TreeView1.Columns.Add.Text := 'Column 1';
TreeView1.Columns.Add.Text := 'Column 2';
pn := TreeView1.Nodes.Add;
pn.Text[0] := 'Normal Node';
pn := TreeView1.Nodes.Add;
pn.Text[0] := 'Extended Group Header';
pn.Extended := True;
for I := 0 to 3 do
begin
n := TreeView1.AddNode(pn);
if I = 1 then
begin
n.Text[0] := 'Sub-header ' + IntToStr(I);
n.Extended := True;
end
else
begin
n.Text[0] := 'Normal Node Column 1 ' + IntToStr(I);
n.Text[1] := 'Normal Node Column 2 ' + IntToStr(I);
end;
end;
TreeView1.EndUpdate;
In virtual mode, return True from OnIsNodeExtended to mark a node as extended.
NodesAppearance reference
| Property | Description |
|---|---|
FixedHeight |
Node height when HeightMode = tnhmFixed |
HeightMode |
tnhmFixed or tnhmVariable |
VariableMinimumHeight |
Minimum height for variable-height nodes (default 25) |
FontColor |
Default node text color |
Font |
Default node font |
Fill, Stroke |
Default node background and border |
SelectedFill, SelectedFontColor |
Selected state style |
DisabledFill, DisabledFontColor |
Disabled state style |
LevelIndent |
Pixel indent per nesting level |
ShowLines |
Draw tree connector lines |
ShowFocus |
Draw focus indicator |
ExpandWidth, ExpandHeight |
Size of the expand/collapse icon area |
SelectionArea |
tsaFull — full row, or tsaText — text only |
Related API
TTMSFNCTreeView—AddNode,InsertNode,RemoveNode,ExpandNode,NodesAppearanceTTMSFNCTreeViewData—TTMSFNCTreeViewNode,TTMSFNCTreeViewVirtualNode
See also
- Modes — virtual vs collection-based approach
- Interaction — editing nodes, filtering, sorting