Copyright © 2010 Promsite. All Rights Reserved.
стр. 2

Изучение компонента TTreeView, часть II

Автор Билл Уитни                                                                                          перевод Виктор Алексеев aka prom

Таблица 1. Описание элементов управления.
Элемент управления
Имя
Текст или заголовок
Прочие свойства
TreeView
TreeView1

PopupMenu:PopupMenu1
PopupMenu
PopupMenu1


Form1
Form1
TTreeView part II

LeaqueShape
LeaqueShape

Brush->Color:clRed
DivisionShape
DivisionShape

Brush->Color:clGreen
TeamShape
TeamShape

Brush->Color:clBlue
PlayerShape
PlayerShape

Brush->Color:clYellow
Button
LeaqueButton
Лига

Button
DivisionButton
Дивизион

Button
TeamButton
Команда

Button
PlayerButton
Игрок

Button
Save
Сохранить

Button
Load
Загрузить

Button
DeleteButton
Удалить

Button
Clear
Очистить

Button
QuitButton
Выйти

Добавление узлов с помощью кнопок

       Добавление лиги в дерево - это просто добавление корневого узла. Поскольку приложение для добавление лиг будет использовать несколько способов (кнопка, перетаскивание, всплывающее меню), лучше поместить код в отдельную функцию. Обработчики событий по кнопке и всплывающему меню показаны в секциях 3 и 4. В итоге вызывается функция AddLeague (секция 5).

       В теле функции AddLeague  с помощью ActiveControl фокус передается дереву, если этого не делать, то фокус останется на том элементе управления, который был активизирован в последний раз, в данном случае на кнопке League (для эксперимента попробуйте заремить ActiveControl). Метод Add добавляет новый корневой узел (в 1-й части статьи мы говорили, что если параметр функции Add будет NULL, то создается корневой узел). Затем вызывается метод EditText(), который позволяет пользователю редактировать наименование узла.

       После того как пользователь введет наименование узла и нажмет кнопку Enter, то по умолчанию фокус передастся в дерево, но на самый верхний корневой узел. На практике такое решение не совсем удобно, т.к. выделяться должен не верхний узел, а тот узел, который только что был создан.  Для решения этой проблемы используется событие Edit, которое генерируется каждый раз, когда изменяется наименование узла. Добавив одну строчку в обработчик событий можно гарантировать, что выделенным останется именно создаваемый новый узел (секция 6).

       Добавление узлов-дивизионов не представляет труда - для этого достаточно выделить нужный узел-лигу и через кнопку Division или аналогичный пункт всплывающего контекстного меню вызвать функцию: AddDivision (секции 7, 8, 9).

       Перед вызовом функции AddDivision надо убедиться, что узел выбран и что выбранный узел есть лига, в противном случае получим сообщение об ошибке. Для проверки последнего, используется перечисление enum entryValue (секция 1 модуля Unit1.h). Поэтому если уровень выбранного узла будет не равен 0, а именно на этом уровне лежит корневой узел, то появится сообщение "Дивизион добавляется только к лиге!".  Если всё нормально, то вызывается функция AddDivision. В этой функции
P  R  O  M  S  I  T  E
Статьи по С++Builder 6
страницы: 1   2   3   4   5   6
страницы: 1   2   3   4   5   6

Для отображения Облака ссылок
необходим
Adobe Flash Player 9
или выше.