(изменено: SafiullinMF, 21 ноября 2012г. 14:12:30)

Тема: Работа с ActiveX компонентами на формах. Элемент управления TDMSTreeCtrl.

ActiveX компоненты появившиеся вместе с четвертой версией TDMS позволяют значительно разнообразить функционал форм ввода. Кроме того, они специально «заточены» для использования вместе с TDMS. Эта статья про один из таких компонентов TDMSTreeCtrl, который позволяет строить дерево элементов, здесь описаны основные приемы работы.

Создание элемента управления:
Итак, для того, чтобы работать с деревом, первым делом нужно поместить на форму соответствующий элемент управления (контрол):

  1. Используем кнопку добавления элемента управления в дизайнере формы
    Работа с ActiveX компонентами на формах. Элемент управления TDMSTreeCtrl.

  2. Выбираем ActiveX компоненту
    Работа с ActiveX компонентами на формах. Элемент управления TDMSTreeCtrl.

  3. Задаем размеры и позиционируем на форме
    Работа с ActiveX компонентами на формах. Элемент управления TDMSTreeCtrl.

Либо используем альтернативный вариант:
Работа с ActiveX компонентами на формах. Элемент управления TDMSTreeCtrl.

В окне свойств контрола можно посмотреть события, которые он может обрабатывать и сгенерировать шаблоны процедур для их обработки. Обработка событий, как и для любого другого контрола, описывается в скрипте формы
Работа с ActiveX компонентами на формах. Элемент управления TDMSTreeCtrl.

Теперь у нас есть пустой контрол на форме. Для того чтобы он мог выполнять осмысленные функции желательно его заполнить элементами (узлами). Типичные места, где это можно сделать: обработка события открытия формы Form_BeforeShow, обработка нажатия кнопки на форме. При этом каждый раз при открытии формы контрол нужно инициализировать заново. Попытка обратиться к компоненту ActiveX, пока форма не открыта, приведет к ошибке.

Ну и самое главное – осталось рассмотреть, что же этот контрол умеет делать, его свойства, методы и события. Добраться до свойств и методов компонента ActiveX  можно через свойство ActiveX контрола.

Set tree = Form.Controls("ACTIVEX_TREE").ActiveX)

Свойства
Существенная особенность – это то, что у TDMSTreeCtrl нет коллекции узлов в свойствах. Все что мы можем получить: количество узлов дерева (свойство Count),  ссылку на выбранный узел  (свойство SelectedItem) и ссылку на корневой узел  (свойство RootItem), если в корне содержится несколько узлов, то свойство дает ссылку на первый из них. Остальная работа с узлами производится при помощи методов.

Есть свойства, управляющие поведением дерева, такие как Scrollable, ShowPlusMinus, CheckBoxes (возможность проставления «галочек» напротив узлов), EditLabels (возможность редактирования названий узлов), множество «косметических» свойств, для настройки внешнего вида (BackColor, BorderStyle, Font и т. д.), а также специфические свойства для работы с объектами TDMS, которые рассмотрим ниже.

Методы
Методы TDMSTreeCtrl можно условно разделить на несколько групп:

  • добавление/удаление: InsertItem, DeleteItem

  • навигация по дереву: GetChildItem, GetParentItem, GetNextSiblingItem, GetPrevSiblingItem при этом важно, что метод GetChildItem может выдать пустую ссылку если состав родительского узла не будет развернут хотя бы 1 раз

  • управление узлами в дереве: Expand (развернуть), Collapse (свернуть), SortChildren;
    парные методы «Get/Set» для получения и редактирования информации об узле GetCheck/SetCheck, GetItemIcon/SetItemIcon и т.п., из них можно выделить методы GetItemData/SetItemData которые позволяют записывать любые данные в узел (например, путь к папке);
    несколько методов «Is» для получения информации IsItemExpanded, IsItemHasChildren

  • в отдельную группу можно вынести методы для работы с объектами TDMS

Работа с объектами TDMS
Методы для работы с объектами TDMS: InsertObject – вставка в дерево объекта TDMS, при этом объект попадает в дерево вместе со своим составом, т.е. мы фактически вставляем кусок дерева объектов, узлы будут связаны с соответствующими объектами TDMS, но для того, чтобы ими можно было управлять (например, открыть объект на редактирование) нужно писать отдельно обработку событий TDMSTreeCtrlGetItemObject – получить ссылку на объект TDMS связанный с узлом дерева, UpdateItem – обновить узел с объекта TDMS.

Свойства для работы с объектами TDMS: DisplayFullContent – управляет отображением в дереве тех объектов (в составе вставленного), для которых не установлен флаг «Отображать в дереве» в свойствах типа объекта, по умолчанию включено; DisplayQueries – управляет отображением выборок в составе объекта, по умолчанию включено.

События
Основные события, которые можно обрабатывать для TDMSTreeCtrl это: Selected (выбор узла), DblClick, Expanded (свертывание/развертывание содержимого),  Checked (установка/снятие «галочки», работает только если включена соответствующая опция), ContextMenu (отработка правого щелчка мыши, позволяет сгенерировать контекстное меню).

Итог
TDMSTreeCtrl можно использовать, в первую очередь, для того чтобы отображать куски дерева объектов на форме, причем легко их собирать из разных мест и показывать в одном. Можно создавать тематические панели в главном окне приложения, при этом правда придется прописывать обработку вроде двойного клика или вызова контекстного меню, иначе форма будет просто иллюстрацией для просмотра структуры. Можно использовать дерево для выбора необходимых разделов (используя свойство CheckBoxes), например, при создании нового строительного проекта на основании шаблона. Ну и, кроме того, легко отображать практически любую древовидную структуру, папки, классификаторы и т.д.

Пример
В приведенном примере содержится форма TDMS «TREE», которую нужно добавить в какой-нибудь тип объектов. При открытии формы в TDMSTreeCtrl будет дважды отображаться структура текущего объекта, вместе с его составом в виде узлов ассоциированных с объектами и в виде обычных узлов. Структуры могут различаться если в составе есть объекты, не отображаемые в дереве объектов TDMS. Рядом с деревом находятся кнопки демонстрирующие поведение TDMSTreeCtrl. TDMSTreeCtrl отрабатывает события двойного клика, проставления/снятия галочки на узле, правого клика. В скрипте формы есть комментарии к коду.
Работа с ActiveX компонентами на формах. Элемент управления TDMSTreeCtrl.

Для того, чтобы посмотреть пример достаточно импортировать файл TREE.tds в любую настройку и прикрепить форму TREE к любому типу объектов.

Post's attachments

TREE.tds 17.8 Кб, 101 скачиваний с 2012-11-19 

You don't have the permssions to download the attachments of this post.

Re: Работа с ActiveX компонентами на формах. Элемент управления TDMSTreeCtrl.

Супер описание! С удовольствием прочитал бы аналогичное по TDMSGridCtrl   ;)  а то у самого так руки и не дошли подробно с ним разобратся  :(