Procedure TTreeViewForm.AddButtonClick(Sender: TObject); var

CaptionStr:String; NewNode:TTreeNode;

begin CaptionStr:=''; if not InputQuery('Ввод имени', 'Введите заголовок элемента',CaptionStr) then exit;

NewNode:=TreeView1.Items.Add(TreeView1.Selected, CaptionStr);
if NewNode.Parent<>nil then
NewNode.ImageIndex:=1;
end;

Здесь я объявил две переменные: CaptionStr типа строка String и NewNode типа TTreeNode. Тип TTreeNode – это тип отдельного элемента дерева элементов.

В первой строчке кода я обнуляю строку CaptionStr. Эта строка в будущем будет использоваться для хранения имени будущего элемента дерева.

Вторая строка имеет следующий код:

if not InputQuery('Ввод имени', 'Введите заголовок элемента', CaptionStr) then

exit;

Здесь выполняется функция InputQuery, которая используется для вывода на экран окна ввода. У этой функции есть три параметра:

1. 1. Заголовок окна ввода.

2. 2. Текст-пояснение, которое подсказывает пользователю, что ему надо вводить.

3. 3. Строковая переменная, в которой мы передаём значение по умолчанию и получаем результат ввода. Если перед вызовом записать в эту переменную какое-нибудь значение, то оно будет использоваться в качестве значения по умолчанию. Но после вызова этой функции этот параметр всегда хранит реально введённое пользователем значение.

 

На рисунке 11.19.2 ты можешь увидеть это окно ввода.

Если окно было закрыто не кнопкой ОК, то происходит выход из процедуры. Об этом говорит наша конструкция:

if not InputQuery(…) then

exit;

Следующая строка кода добавляет новый элемент в наше дерево:

NewNode:=TreeView1.Items.Add(TreeView1.Selected, CaptionStr);

У компонента TreeView1 есть свойство Items в котором хранятся все элементы дерева. Это свойство имеет объектный тип TTreeNodes. Чтобы добавить туда новый элемент, нужно вызвать метод Add объекта Items. Получается, что в объекте TreeView1 есть ещё один объект Items в котором хранятся все элементы. Мы уже сталкивались с такими случаями, когда внутри одного объекта был другой объект.

У метода Add есть два параметра:

1. 1. Элемент, к которому надо добавить новый. Здесь я передаю выделенный элемент (TreeView1.Selected).

2. 2. Заголовок нового элемента.

 

Результат выполнения этого метода – указатель на новый элемент. Этот результат мы сохраняем в переменной NewNode. Теперь мы можем изменять и другие значения этого элемента. Например, как в следующем коде я буду изменять картинку:

if NewNode.Parent<>nil then
NewNode.ImageIndex:=1;

Здесь идёт проверка, если свойство Parent нашего дерева не равно нулю (т.е. компонент не является верхним в дереве), то изменить значение ImageIndex созданного нами элемента на 1 (по умолчанию это значение 0).

По нажатию кнопки «Добавить элемент» пишем следующий код:

var CaptionStr:String; NewNode:TTreeNode;

begin CaptionStr:=''; if not InputQuery('Ввод имени подэлемента',


 

 

'Введите заголовок подэлемента',CaptionStr) then exit;

NewNode:=TreeView1.Items.AddChild(TreeView1.Selected, CaptionStr); if NewNode.Parent<>nil then NewNode.ImageIndex:=1;

Здесь код практически тот же, что и для кнопки «Добавить». Единственная разница в том, что при добавлении нового элемента мы используем метод AddChild. Отличие этого метода от просто Add заключается в том, что он добавляет дочерний элемент. Например, если ты выделил в списке какой-то элемент и передал его в качестве первого параметра в AddChild, то новый элемент будет как бы подчиняться выделенному. При использовании метода Add новый элемент будет находиться на одном уровне дерева с переданным в качестве первого параметра.

Теперь напишем код для кнопки «Добавить»:

if TreeView1.Selected<>nil then TreeView1.Items.Delete(TreeView1.Selected);

Здесь нужно удалить выделенный элемент, поэтому сначала я проверяю, есть ли вообще выделенный элемент в дереве:

if TreeView1.Selected<>nil then

Если такой элемент есть, то выполниться следующий код:

TreeView1.Items.Delete(TreeView1.Selected);

Здесь мы используем метод Delete объекта Items, чтобы удалить элемент дерева. В качестве параметра надо передать элемент, который мы хотим удалить (я передаю выделенный TreeView1.Selected.

Для кнопки «Изменить заголовок» мы напишем следующий код: