Skip to main content
Table of Contents

Getting started

Get a working TTMSFNCTreeView on screen in five minutes.

Add the component to a form

  1. Open your Delphi or C++ Builder project.
  2. In the Tool Palette, search for TTMSFNCTreeView.
  3. Drag it onto your form.

The component drops with three default columns and sample nodes already populated.

Add columns and nodes

Add columns and nodesPascalC++
uses
  FMX.TMSFNCTreeView, FMX.TMSFNCTreeViewData;

procedure TForm1.PopulateTree;
var
  n: TTMSFNCTreeViewNode;
begin
  TreeView1.BeginUpdate;
  TreeView1.ClearNodes;
  TreeView1.ClearColumns;

  TreeView1.Columns.Add.Text := 'Name';
  TreeView1.Columns.Add.Text := 'Year';

  n := TreeView1.AddNode;
  n.Text[0] := 'Delphi 12 Athens';
  n.Text[1] := '2023';

  n := TreeView1.AddNode;
  n.Text[0] := 'Delphi 11 Alexandria';
  n.Text[1] := '2021';

  TreeView1.EndUpdate;
end;
void __fastcall TForm1::PopulateTree()
{
  TreeView1->BeginUpdate();
  TreeView1->ClearNodes();
  TreeView1->ClearColumns();

  TreeView1->Columns->Add()->Text = "Name";
  TreeView1->Columns->Add()->Text = "Year";

  TTMSFNCTreeViewNode *n = TreeView1->AddNode();
  n->Text[0] = "Delphi 12 Athens";
  n->Text[1] = "2023";

  n = TreeView1->AddNode();
  n->Text[0] = "Delphi 11 Alexandria";
  n->Text[1] = "2021";

  TreeView1->EndUpdate();
}
TreeView with two columns and nodes

Add child nodes

Add child nodesPascalC++
uses
  FMX.TMSFNCTreeView, FMX.TMSFNCTreeViewData;

procedure TForm1.AddChildNodes;
var
  parent, child: TTMSFNCTreeViewNode;
begin
  TreeView1.BeginUpdate;

  parent := TreeView1.AddNode;
  parent.Text[0] := 'Embarcadero';

  child := TreeView1.AddNode(parent);
  child.Text[0] := 'Delphi';

  child := TreeView1.AddNode(parent);
  child.Text[0] := 'C++ Builder';

  TreeView1.ExpandNode(parent);
  TreeView1.EndUpdate;
end;
void __fastcall TForm1::AddChildNodes()
{
  TreeView1->BeginUpdate();

  TTMSFNCTreeViewNode *parent = TreeView1->AddNode();
  parent->Text[0] = "Embarcadero";

  TTMSFNCTreeViewNode *child = TreeView1->AddNode(parent);
  child->Text[0] = "Delphi";

  child = TreeView1->AddNode(parent);
  child->Text[0] = "C++ Builder";

  TreeView1->ExpandNode(parent);
  TreeView1->EndUpdate();
}

Respond to selection

Respond to node selectionPascalC++
uses
  FMX.Dialogs, FMX.TMSFNCTreeView, FMX.TMSFNCTreeViewData;

procedure TForm1.HookSelection;
begin
  TreeView1.OnAfterSelectNode := TreeView1AfterSelectNode;
end;

procedure TForm1.TreeView1AfterSelectNode(Sender: TObject;
  ANode: TTMSFNCTreeViewVirtualNode);
begin
  if Assigned(ANode.Node) then
    ShowMessage('Selected: ' + ANode.Node.Text[0]);
end;
void __fastcall TForm1::HookSelection()
{
  TreeView1->OnAfterSelectNode = TreeView1AfterSelectNode;
}

void __fastcall TForm1::TreeView1AfterSelectNode(TObject *Sender,
  TTMSFNCTreeViewVirtualNode *ANode)
{
  if (ANode->Node != nullptr)
    ShowMessage("Selected: " + ANode->Node->Text[0]);
}

Where to next

  • Modes — virtual vs collection-based — choose the right mode for your data size.
  • Columns and groups — autosizing, stretching, per-column appearance.
  • Nodes — fixed/variable height, checkboxes, extended nodes.
  • Interaction — editing, filtering, sorting, clipboard, drag-and-drop.
  • API reference — full property, method, and event list.