Тема: Работа с ActiveX компонентами на формах. Элемент управления TDMSListCtrl.
ActiveX компоненты появившиеся вместе с четвертой версией TDMS позволяют значительно разнообразить функционал форм ввода. Кроме того, они специально «заточены» для использования вместе с TDMS. Эта статья про один из таких компонентов TDMSListCtrl, который позволяет строить список элементов.
Создание элемента управления
Итак, для того, чтобы работать со списком элементов, первым делом нужно поместить на форму соответствующий элемент управления (контрол):
В окне свойств контрола можно посмотреть события, которые он может обрабатывать и сгенерировать шаблоны процедур для их обработки. Обработка событий, как и для любого другого контрола, описывается в скрипте формы
Теперь у нас есть пустой контрол на форме. Для того чтобы он мог выполнять осмысленные функции желательно его заполнить элементами. Типичные места, где это можно сделать: обработка события открытия формы Form_BeforeShow, обработка нажатия кнопки на форме. При этом каждый раз при открытии формы контрол нужно инициализировать заново. Попытка обратиться к компоненту ActiveX, пока форма не открыта, приведет к ошибке.
Теперь рассмотрим возможности контрола, его свойства, методы и события. Добраться до свойств и методов компонента ActiveX можно через свойство ActiveX контрола.
Set list = Form.Controls("TDMSLIST").ActiveX
Свойства
Свойства TDMSListCtrl можно разделить на несколько групп. Ниже описана основная часть:
Управление внешним видом контрола: BackColor, BorderStyle… HideSelection (скрывает подсветку выбранных элементов при санятии фокуса с контрола). Кроме того, для каждой ячейки можно работать со свойством ItemFormat, которое возвращает значение типа TDMSTextFormat, оно позволяет настраивать внешний вид отдельной ячейки TDMSListCtrl.
Свойства, управляющие поведением контрола:
CheckBoxes, возможность проставления галочек напротив элементов списка
ColumnAutosize, автоматическое растягивание ширины столбцов под ширину контрола
ColumnSortEnabled, возможность сортировки элементов списка по столбцам
ColumnIcon, устанавливает иконку для определенного столбца (отображается слева от названия)
FilterBarEnabled, наличие фильтра
SingleSelection, отключение возможности множественного выбора элементовСвойства для работы со столбцами:
ColumnCanDrag, возможность перетаскивания для определенного столбца
ColumnOrder, порядковый номер столбца при отображении (меняется при перетаскивании, при этом индекс столбца, использующийся для обращения к нему, остается неизменным)
ColumnResizible, возможность растягивания столбца
ColumnSort, режим сортировки для столбцаСвойства для работы с элементами:
ItemText, текст для указанного элемента в указанном столбце
ItemIcon, иконка для указанного элемента в указанном столбце
ItemData, значение любого типа, привязанное к определенному элементу (например, путь к файлу или ссылка на версию объекта)
ItemFormat, уже упоминавшее свойство для настройки внешнего вида ячеек (указывается элемент и столбец)
SelectedItem, выбранный элемент, при множественном выборе последний выбранный элемент
Check, управление галочкой напротив элемента списка (если включен соответствующий режим)Кроме этого, есть и другие свойства с очевидным назначением
Методы
Методов у TDMSListCtrl немного и их также можно разделить на группы:
Работа с элементами: InsertItem, DeleteItem, DeleteAllItems
Работа со столбцами: InsertColumn, DeleteColumn
Полная очистка контрола: DeleteAll
Управление выбором элементов: SelectItems (позволяет выбрать диапазон элементов, при этом можно сбросить/оставить предыдущий выбор), IsItemSelected
Специальные инструменты для работы с TDMS
Кроме уже упомянутых свойств и методов есть еще специальные для работы с данными TDMS:
Метод Init. Позволяет инициализировать контрол значениями из коллекций TDMSObjects, TDMSUsers или из TDMSTableAttributes, TDMSSheet. При этом в контроле появятся соответствующие столбцы и элементы, будут заполнены текстовые данные, проставлены иконки элементов. Применение метода очищает контрол от элементов и столбцов которые были перед этим
Метод InsertObject, добавляет элемент, связанный с объектом TDMS
Метод UpdateItem, обновление элемента со связанного с ним объекта
Свойство ItemObject позволяет получить ссылку на объект связанный с элементом списка
События
Основные события, которые можно обрабатывать для TDMSTreeCtrl это:
Checked, проставление/снятие галочки у элемента, отменяемое
DblClick, двойной клик по элементу
ColumnClick, клик по заголовку столбца
ContextMenu, правый клик по элементу, можно выводить контекстное меню
ColumnContextMenu, правый клик по заголовку столбца, можно выводить контекстное меню
Итог
TDMSListCtrl удобно использовать для обработки результатов выборки, состава объекта или коллекции объектов/пользователей, да и вообще любых списков. Возможности ограничены тем, что нельзя вручную редактировать текст в ячейках.
Пример
В приведенном примере содержится форма TDMS «LIST», табличный атрибут «LIST_ITEM» которые нужно добавить в какой-нибудь тип объектов. При открытии формы в TDMSListCtrl будет дважды отображаться состав текущего объекта в виде элементов, связанных с объектами TDMS и в виде обычных элементов. TDMSListCtrl отрабатывает события двойного клика, правого клика по заголовку столбца. Рядом со списком находятся кнопки демонстрирующие поведение TDMSListCtrl. В скрипте формы есть комментарии к коду.
Для того, чтобы посмотреть пример достаточно импортировать файл LIST.tds в любую настройку и прикрепить форму LIST и атрибут LIST_ITEM к любому типу объектов.