Обзор компонентов библиотеки C++Builder                                159

InsertObject(TTreeNode* Node,           Вставляет новый узел с текстом S и
const System::AnsiString S, void * Ptr) объектом Ptr сразу после узла Node
на то же уровень. Индексы последу-
ющих узлов увеличиваются на 1

AddChildObject(TTreeNode* Node,        Добавляет узел с текстом S и объек-
const System::AnsiString S, void * Ptr) том Ptr как последний дочерний
узла Node

AddChildObjectFirst(TTreeNode* Node,   Вставляет новый узел с текстом S и
const System::AnsiString S, void * Ptr) объектом Ptr как первый из дочерних
узлов узла Node. Индексы последую-
щих узлов увеличиваются на 1

Объект, связанный с некоторым узлом, можно найти с помощью его свойства
Data. Например, TreeViewl->Items->Item[l]->Data.

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

TreeViewl->Items->Clear() ;

удалит в нашем примере все узлы, а оператор

TreeViewl->Items->Delete(TreeViewl->Items->Item[l]);

удалит узел «цех I» и его дочерние узлы (если они имеются).

При удалении узлов, связанных с объектами, сами эти объекты не удаляются.
Реорганизация дерева, связанная с созданием или удалением многих узлов,
может вызывать неприятное мерцание изображения. Избежать этого можно с по-
мощью методов BeginUpdate и EndUpdate. Первый из них запрещает перерисовку
дерева, а второй — разрешает. Таким образом, изменение структуры дерева может
осуществляться по следующей схеме:

TreeViewl->Items->BeginUpdate () ;

<операторы изменения дерева>
TreeViewl->Items->E»tlUpdate() ;

Если метод BeginUpdate применен подряд несколько раз, то перерисовка дерева
произойдет только после того, как столько же раз будет применен метод EndUpdate.

Среди свойств узлов следует отметить Count — число узлов, управляемых дан-
ным, т.е. дочерних узлов, их дочерних узлов и т.п. Если значение Count узла рав-
но нулю, значит у узла нет дочерних узлов, т.е. он является листом дерева.

Вернемся к свойствам компонента Tree View. Важным свойством компонента
TreeView является Selected. Это свойство указывает узел, который выделен поль-
зователем. Пользуясь этим свойством можно запрограммировать операции, кото-
рые надо выполнить для выбранного пользователем узла. Если ни один узел не вы-
бран, значение Selected равно NULL. При выделении пользователем нового узла
происходят события OnChanging (перед изменением выделения) и OnChanged — по-
сле выделения. В обработчик события передаются параметры TTreeNode *Node —
узел, который выделен в данный момент, и bool &AllowChange — разрешение
на перенос выделения. Если в обработчике задать AllowChange = false, то пере-
ключение выделения не произойдет. В обработчик события OnChanged передается
только параметр TTreeNode *Node — выделенный узел. В этом обработчике мож-
но предусмотреть действия, которые должны производится при выделении узла.

У компонента TreeView имеется свойство RightClickSelect, разрешающее
(при значении равном true) выделение узла щелчком как левой, так и правой^
кнопкой мыши. Но и в этом случае событие OnChanged наступает только при вы-
делении узла левой кнопкой мыши.