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

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

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

выполняется метод AddChild, параметрами которого являются имя узла-дивизиона и указатель на узел-родитель(лигу). В этой же функции вызывается метод Expand(true) для того чтобы был виден добавляемый узел-дивизион, в противном случае он будет не виден (секция 8).

       Следующим шагом является добавление узла-команды. Это будет немного сложнее, т.к. при создании узла-команды надо ещё добавить узлы-категории по умолчанию. Коды обработчиков событий по клику на кнопке Team  и по контекстному меню Team показаны  в секциях 10 и 11 модуля Unit1.cpp. Функция AddTeam в секции 12.

       В функции AddTeam (секция 12), как обычно, устанавливаем активный элемент управления и добавляем узел-команду в выделенный дивизион. Слева от узла-команды появляется знак (+), который говорит о том, что данный узел имеет потомков (в данном случае категории игроков). Сами категории скрыты и появятся только после щелчка на знаке (+).

       Аналогичными способами добавляется узел-игрок. Сначала надо проверить, что родительский узел выделен и его уровень валидный. Код функции AddPlayer показан в секции 15. Вызов этой функции в секциях 13, 14.

Работа с вплывающим меню

На рис. А в рантайме можно увидеть всплывающее меню. Оно содержит такие же опции, как и кнопки главной формы. Чтобы избежать дублирования кода, события всплывающего меню просто вызывают обработчики событий соответствующих кнопок.

       Дополнительно: всплывающее контекстное меню создается так:

1.        На форму помещается компонент TPopupMenu
2.        Кликом на свойстве Items в инспекторе объектов вызываем форму TmenuItem, где создаем меню как на рис. А
3.        Связываем созданное меню с нужным элементом управления (в данном случае TTreeView). Для этого в свойстве PopupMenu объекта TtreeView устанавливаем значение TPopupMenu1.
После этих манипуляций в режиме выполнения, при клике правой кнопкой на дереве созданное меню и появится.

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

       Для реализации добавления узлов способом drag and drop можно использовать функции созданные ранее для кнопок. Однако возникает задача в определении места в дереве, куда будем перетаскивать объект TShape. Перед тем как приступить к написанию кода, надо в свойстве DragMode объекта TShape установить значение dmAutomatic, что позволит перетаскивать объекты TShape.

       Если вы раньше использовали drag and drop, то вероятно заметили, что перетаскиваемый элемент меняет свой вид, когда находится над нужным местом. Это достигается в событии OnDragOver, который определяет, как метод OnDragDrop элемента управления обращается с перетаскиваемым объектом. С помощью события OnDragOver определяется допустимость перетаскивания объекта. Рассмотрим код листинга секции 18:

       Функция TreeView1DragOver имеет несколько полезных параметров. Так по значению параметра Source можно определить тип переносимого объекта - в коде проверяется, является ли объект типом TShape.  Если это так, то тогда  присваиваем параметру Accept значение true, что говорит о том, что операция с перетакиваемым объектом  является корректным действием. Установка параметра в true также меняет вид курсора объекта, что показывает пользователю о возможности опускания (drop) объекта.

       Значения параметров X и Y точно указывают положение курсора в дереве и определяют можно ли выполнить операцию drag and drop. Например, вы можете вставить в дерево лиги, дивизионы, команды и игроков. Но нельзя вставить игроков в лиги, дивизионы, команды - поскольку игроков можно вставить только в категории. Вы можете определить такое поведение в любом onDragOver и onDragDrop.

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
или выше.