- •7.6 Методические указания.
- •7.6.1 Элементы управления ActiveX
- •7.6.2 Особенности компонентного программирования с применением ActiveX.
- •7.6.3 Структура элементов ActiveX
- •7.6.3.1 Базовые интерфейсы элементов управления ActiveX.
- •7.6.3.2 Базовые интерфейсы контейнеров управляющих элементов ActiveX.
- •7.6.4. Использование существующих элементов ActiveX в среде Delphi.
- •7.6.4.1 Инсталляция существующих элементов ActiveX для работы в среде Delphi.
- •7.6.4.2 Деинсталляция установленных элементов ActiveX.
- •7.6.5 Реализация компонентов ActiveX в Delphi.
- •Procedure Initialize; override;
- •7.6.6 Создание собственных элементов ActiveX и форм ActiveForm
- •7.6.6.1 Преобразование компонента vcl в элемент ActiveX
- •7.6.6.2 Создание форм Active Form.
7.6.4.2 Деинсталляция установленных элементов ActiveX.
Деинсталляцию элемента ActiveX следует начинать с удаления ссылки на него. Для этого надо открыть искомый файл DPK, убрать ненужные элементы и перекомпилировать пакет. После этого элемент (или элементы) исчезнут со страницы Палитры компонентов. Если вы уверены в том, что этот элемент больше никем не используется, можете удалить информацию о нем из системного реестра (кнопка Remove диалогового окна Import ActiveX). Только после этого можно удалить с диска сам файл OCX или динамическую библиотеку, в которой он содержится.
7.6.5 Реализация компонентов ActiveX в Delphi.
Компоненты ActiveX в Delphi используют те же механизмы, что и обычные объекты СОМ. Классы компонентов наследуют свойства и методы класса-предка и интерфейса-предка. Компоненты ActiveX предоставляют клиентам свои интерфейсы, которые происходят от IDispatch. Для создания экземпляров компонентов ActiveX используются фабрики класса. Информация о компоненте содержится в библиотеке типов.
Общим предком всех классов элементов управления ActiveX в Delphi является класс TActivexcontrol. Он инкапсулирует базовые функции, позволяющие компонентам ActiveX взаимодействовать с контейнером и обеспечивать реакцию компонента на события. Также он содержит все базовые интерфейсы элемента управления ActiveX.
Иерархия классов-предков компонентов ActiveX показывает, что технология ActiveX базируется на функциональности родительских технологий - СОМ и Автоматизация.
Процесс создания компонентов ActiveX в Delphi существенно облегчен за счет использования мастера, генерирующего весь необходимый исходный код для нового компонента, его фабрики класса и библиотеки типов.
Дополнительно к этому для компонентов ActiveX создается специальный класс-надстройка, призванный обеспечить взаимодействие компонента ActiveX со своим контейнером Delphi. Классы-надстройки порождаются от класса TOlecontrol.
непосредственным предком любого компонента ActiveX в Delphi является класс TActiveXControl. Происходя от базовых классов объектов СОМ и Автоматизации, он предоставляет своим потомкам механизм использования диспинтерфейсов, необходимых для работы элементов управления ActiveX. Кроме этого, он содержит все базовые интерфейсы ActiveX, перечисленные в табл. 7.2.
Применять конструктор класса нет необходимости, так как для создания экземпляра компонента ActiveX используется фабрика класса. Но при создании компонента будет вызван метод
Procedure Initialize; override;
который вы можете перекрыть и применить для установки начальных значений и инициализации вспомогательных объектов в собственном элементе, управления ActiveX.
Класс предоставляет для использования готовый механизм уведомления о действиях с компонентом. Если необходимо изменить значение какого-либо свойства в ответ на действия пользователя, следует удостовериться в том, что это свойство можно менять. Для этого применяется один из вариантов перегружаемого метода:
function PropRequestEdit(const PropertyName : WideString): Boolean; overload;
function PropRequestEdit(DispID : TDispID): Boolean; overload;
В качестве параметра необходимо задать имя свойства PropertyName или его диспетчерский идентификатор DispID. Если свойство доступно для записи, функция возвращает True.
При изменении значения какого-либо свойства компонента вы можете вызвать один из вариантов перегружаемого метода
procedure PropChanged(const PropertyName : WideString); overload;
procedure PropChanged(DispID : TDispID); overload;
передавая ему в качестве параметра имя свойства PropertyName или его диспетчерский идентификатор DispID. Метод сгенерирует событие onchanged.
При работе с перечисленными методами старайтесь использовать диспетчерские идентификаторы свойств, так как имена свойств обрабатываются внутри методов класса TActiveXControl и все равно преобразуются в идентификаторы.
После создания экземпляра компонента вы можете получить доступ к экземпляру класса VCL, содержащего ваш компонент ActiveX. Для этого применяется свойство
property Control : TWinControl;
Для получения указателей на необходимые интерфейсы можно использовать метод
function ObjQuerylnterface(const IID : TGUID; out Obj): HResult; override;
Обратите внимание, что это просто реализация соответствующего метода интерфейса lUnknown, который, конечно же, поддерживается классом TActiveXControl.
Фабрика класса компонента ActiveX. Для создания экземпляров компонентов ActiveX в Delphi используется фабрика класса. Ее функциональность унаследована от аналогичной фабрики технологии Автоматизация. Фабрика класса для компонентов ActiveX входит в состав класса TActiveXControlFactory.
Среда разработки Delphi является контейнером ActiveX. При создании с помощью мастера ActiveX Control Wizard нового компонента ActiveX в Delphi для него автоматически создается специальный класс-оболочка. Назначение этого класса - предоставлять все методы интерфейсов компонента ActiveX для взаимодействия со средой разработки. Таким образом, реализован механизм адекватного представления и поведения элементов управления ActiveX в среде разработки Delphi. Основные функции класса-надстройки реализованы в классе TOlecontrol. Его свойства и методы обеспечивают необходимое управление компонентом ActiveX. Обычно разработчику нет необходимости использовать методы этого класса напрямую.
