Основные свойства класса TTreeNode 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основные свойства класса TTreeNode



Absolutelndex

Абсолютный номер узла в дереве. Самый первый узел имеет номер 0, далее

происходит нумерация всех потомков этого узла. При этом, если у потомка в

свою очередь есть подчиненные узлы, то нумерация продолжается с первого

потомка и так далее

Count

Число потомков узла

Cut

Имеет значение True, если объект рисуется как "вырезанный". Действия по

поддержке этой операции программист должен реализовать самостоятельно

Data

Свойство имеет тип Pointer и указывает на связанный с узлом объект

Deleting

Имеет значение True, если данный узел находится в состоянии удаления. Этот

процесс может быть длительным, если удаляется узел с большим числом потомков

Expanded

Имеет значение True, если узел развернут, то есть кнопка находится в состоянии "-"

Focused

Имеет значение True, если узел имеет фокус

HasChildren

Имеет значение True, если узел имеет потомков

ImageIndex

Номер картинки в списке картинок

Index

Номер узла в списке потомков вышестоящего родителя. Первый узел-потомок

имеет номер 0(?), второй — 1 и так далее

Item

Массив узлов, являющихся потомками данного

IsVisible

Имеет значение True, если узел виден

Level

Уровень глубины узла. Верхний уровень имеет номер 0, следующий уровень —

номер 1 и так далее

Selected

Имеет значение True, если узел выделен

SelectedIndex

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

Text

Текст, выводимый в узле

TreeView

Ссылка на родительский объект TTreeView

Работу дерева проще всего понять па следующем примере.

 

Пусть на форме имеется пустой объект TreeViewl, текстовое поле и две кнопки: Узел и Потомок. После ввода имени и щелчка на кнопке Узел в дерево добавляется новый узел на текущем уровне.При щелчке на кнопке Потомок новый узел добавляется в число потомков текущегоузла.

Главное, что требуется в этом примере, — оперативно отслеживать в программе

перемещение пользователем фокуса по дереву, чтобы не просматривать в поисках

выделенного узла (значение свойства Selected которого равно True) весь массив узлов

каждый раз заново. Для этого можно обрабатывать событие OnGetSelectedIndex,

которое формируется, когда возникает потребность в отрисовке конкретного вы-

деленного узла. Запомним этот узел в переменной MyNode, которая будет принад-

лежать классу формы TForm 1 и иметь тип TTreeNode.

MyNode: TTreeNode;

В момент создания формы эта переменная должна получить начальное значение,

указывающее, что ни один узел не выбран.

procedure TForml.FormCreate(Sender: TObj ect);

begin

MyNode:= nil

end;

Обработчик события OnGetSelectedIndex запишется следующим образом.

procedure TForml.TreeViewlGetSelectedlndex(Sender: TObject;Node: TTreeNode);

begin

MyNode:= Node;

end;

При щелчке на кнопке Узел новый узел будет добавляться к дереву с помощью

метода

function Add(Node: TTreeNode; const S: string): TTreeNode;

Этот метод добавляет новый узел на один уровень с узлом Node (или на самый

верхний уровень, если вместо узла указано значение nil) и возвращает ссылку на

этот узел. Новому узлу в свойство Text записывается значение строки S.

 

procedure TForml.ButtonlClick(Sender: TObject);

Begin

If TreeViewl.Items.Count = 0

then TreeViewl.Items.Add(nil, Editl.Text)

else TreeViewl.Items.Add(MyNode,Editl.Text)

end;

Предварительно проверяется, есть ли в дереве хотя бы один узел.

Для добавления нового потомка узла используется метод

function AddChild(Node: TTreeNode; const S: string): TTreeNode;

Он аналогичен предыдущему, за исключением того, что новый узел добавляется

не на один уровень с узлом Node, а становится его потомком, последним в списке

всех потомков.

procedure TForml.Button2Click(Sender: TObjectl;

Begin

if TreeViewl.Items.Count =0

then TreeViewl.Items.AddChild(MyNode,Editl.Text)

end;

При добавлении узла-потомка требуется, чтобы родительский узел уже существо-

вал, поэтому достаточно проверить, что в дереве есть хотя бы одни элемент.

Для удаления текущего элемента можно использовать следующий оператор.

TreeViewl.Items.Delete(MyNode);

При этом фокус переместится на родительский узел удаляемого объекта. Узел удаляется вместе со всеми его потомками.

Теперь можно формировать дерево произвольной сложности (рис. 4.26, стр 298).

Когда дерево создано во время работы программы, его структуру желательно сохра-

нить на жестком диске до следующего сеанса. Это можно сделать с помощью метода

SaveToFile.

TreeViewl.SaveToFile('TREE.TXT');

Дерево сохраняется в текстовом формате в наглядном виде — с отступами. Впоследствии загрузить дерево из файла можно с помощью метода

procedure LoadFrornFile (const FileName: string);

Узлы в дереве можно автоматически сортировать. Момент пересортировки зада-

ется в свойстве SortType одним из трех следующих значений.

StData

Узлы пересортировываются, когда изменяется их свойство Data

StText

Узлы пересортировываются, когда изменяется их свойство Text

StBoth

Узлы пересортировываются, когда изменяются оба эти свойства

Значение stNone означает, что сортировка не выполняется.

Способ сортировки определяется обработчиком события OnCompare, о котором рас-

сказывалось при описании компонента TListView. Например, чтобы отсортировать все элементы дерева в убывающем порядкеих названий, надо установить значение свойства SortType равным stText и написать следующий текст обработчика.

procedure TForml. TreeViewlCornpare (Sender: TObject; Nodel, Node2: TTreeNode; Data: Integer; var Compare: Integer);

begin

if Nodel.Text > Node2.Text then Compare:= -1 else

if Nodel.Text < Node2.Text then Compare:= +1

else Compare:= 0

end;

ВНИМАНИЕ Реально процедура сортировки выполняется, когда происходит

редактирование названия узла или связанных с ним данных, а также при изменении значения свойства SortType.



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 201; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.154.41 (0.018 с.)