II способ

Дерево можно формировать или перестраивать и во время выполнения приложения. Для этого служит ряд методов объектов типа TTreeNodes. Следующие методы позволяют вставлять в дерево новые узлы:

Add( Node, S) Добавляет новый узел с текстом S как последний узел уровня, на котором расположен Node.
AddFirst( Node, S) Вставляет новый узел с текстом S как первый из узлов уровня, на котором находится Node. Индексы последующих узлов увеличиваются на 1.
Insert(Node, S) Вставляет новый узел с текстом S сразу после узла Node на то же уровень. Индексы последующих узлов увеличиваются на 1.
AddChiId( Node, S) Добавляет узел с текстом S как последний дочерний узла Node.
AddChiIdFirst(Node, S) Вставляет новый узел с текстом S как первый из дочерних узлов узла Node. Индексы последующих узлов увеличиваются на 1

Например:

//вставить на место выделенного, остальные сдвигаются //вниз:

TreeView1->Items->Insert(TreeView1->Items->

Item[TreeView1->Selected->AbsoluteIndex], "");

//Вставить нулевым на тот же уровень, что и выделенный:

TreeView1->Items->AddFirst(TreeView1->Items->

Item[TreeView1->Selected->AbsoluteIndex], "");

//Добавляет новый узел как последний узел уровня, на //котором расположен выделенный:

TreeView1->Items->Add(TreeView1->Items->

Item[TreeView1->Selected->AbsoluteIndex], "");

Каждый из этих методов возвращает вставленный узел. Ниже в качестве примера приведен код, формирующий дерево, которое вы можете видеть на рис.1

Рис.1

TreeViewl->Items->Clear(); // очистка списка

// добавление корневого узла "производство" (индекс 0)

TreeViewl->Items->Add(NULL, "Мои рисунки");

/* добавление дочених узлов "цех 1" - "цех 3"

(индексы 1-3) */

TreeViewl->Items->AddChiId(TreeViewl->Items->Item[0] , "Мореходы")

TreeViewl->Items->AddChild(TreeViewl->Items->Item[0],"Художник Васильев")

TreeViewl->Items->AddChild(TreeViewl->Items->Item[0],"Фото ВОВ")

Добавим программно ещё один узел «Тексты» с подузлами «Биографии» и «Пояснения»:

Рис.2

/* добавление корневого узла "Тексты" после узла "Мои рисунки" (индекс 4) */

TreeViewl->Items->Add(TreeViewl->Items->Item[0], "Тексты"

/* добавление дочених узлов "Биографии" и "Поясненияё" узла "управление" */

TreeViewl->Items->AddChild(TreeViewl->Items->Item[4],"Биографии");

TreeViewl->Items->AddChild(TreeViewl->Items->Item[4],"Пояснения");

Дерево может быть сколь угодно разветвленным. Например, следующие операторы добавляют дочерние узлы «Крузенштерн» и «Лисянский» в сформированный ранее узел «Мореходы»:

TreeViewl->Items->AddChild(ТreeViewl->Items->Item[l], "Крузенштерн");

TreeViewl->Items->AddChiId(TreeViewl->Items->Item[l], "Лисянский");

Рис.3

TTreeNode *Node=TreeView1->Selected;

int level=Node->Level; //Определяем уровень выделенного узла

int ind=Node->Index; //Идекс выделенного узла внутри уровня

TreeViewl->Items->Item[l]->Text ;// Текст,связанный с узлом 1

 

Для удаления узлов имеется два метода: Clear(void), очищающий все дерево, и Delete(TTreeNode* Node), удаляющий указанный узел Node и все его узлы — потомки.

Например, оператор

TreeViewl->Items->Clear(); /*удалит в нашем примере все узлы*/

TreeViewl->Items->Delete(TreeViewl->Items->Item[l]) ; /*удалит узел «Мореходы» и его дочерние узлы*/

Для редактирования текста выделенного узла есть метод:

TreeView1->Selected->EditText() ;

Его можно вставить, например, в обработку события OnDblClick

Вызов контекстного меню правой клавишей мышки.

TreeView1->PopupMenu = PopupMenu1;