Глава 5. Создание элементов управления ActiveX
Большинству пользователей услышавших термин АсtiveX на ум сразу приходят элементы управления ОСХ по-новому названные в очередном маркетинговом трюке компании Microsoft. В некотором смысле это так Microsoft действительно использует термин ActiveX для обозначения технологии базирующихся на модели СОМ. Но аббревиатура OLE уже не охватывает всех этих технологий. Microsoft настолько расширила определение OLE, что разработчики уже давно считают сопутствующие технологии чем-то отдельным от OLE. Поэтому в профессиональную лексику был введен термин ActiveX, используемый для обозначения всех базирующихся на СОМ технологии, которые существуют на данный момент и будут созданы в будущем. На сегодняшний день ActiveX включает следующие технологии:
Библиотеки ActiveX (внутренние серверы)
Серверы автоматизации (внутренние и внешние серверы)
Элементы управления ActiveX
Формы ActiveForm (комбинированные элементы управления ActiveX)
Страницы свойств
Чтобы упростить разработку базирующихся на стандарте ActiveX технологий, необходима продуманная и спланированная среда которая инкапсулирует в себе сложность множества интерфейсов и функции ActiveX и OLE. Разработчики Delphi создали механизм, с помощью которого любой элемент управления Windows, порожденный классом TWinControl, можно превратить в элемент управления ActiveX. Вы можете использовать существующие компоненты VCL и превратить их в элементы ActiveX, которые будут полезны в других средах разработки, например в Visual Basic.
Для облегчения преобразования разработчики Delphi создали среду Delphi ActiveX (DAX). Она упрощает разработку серверов СОМ, типизированных объектов СОМ, серверов автоматизации, элементов управления ActiveX, форм ActiveForm и страниц свойств. Давайте ближе познакомимся со средой DAX.
Объекты ActiveX в среде DAX
Ниже показана иерархия классов среды DAX, которые поддерживают объекты СОМ, типизированные объекты СОМ, серверы автоматизации, элементы управления ActiveX и формы ActiveForm.
TComObject
TTypedComObject
TAutoObject
TActiveXControl
TCustomForm
TActiveForm
Класс TCustomForm вместо класса TForm использован в качестве предка класса TActiveForm, так как в TCustomForm включены только свойства и методы, уместные для формы ActiveX.
Страницы свойств в среде DAX
Другой частью среды DAX являются страницы свойств, которые используются в различных средах программирования для изменения значений свойств элементов управления на этапе разработки. Страницы свойств часто оказываются устаревшими, так как среды программирования обладают различными реализациями инспекторов свойств объектов, которые позволяют оперировать свойствами объектов во время разработки приложения. Но несмотря на это в создаваемые элементы управления ActiveX нужно всегда включать страницы свойств. Даже если эти страницы не будут использоваться ни для чего больше, то они хотя бы предоставят разработчику способ построения специальных окон редактирования более сложных свойств элемента управления. Как будет показано ниже, в Delphi можно довольно просто создавать страницы свойств. Ниже показана иерархия классов, которая поддерживает создание страниц свойств в Delphi.
TCustomForm
TPropertyPage
TActiveXProperty Page
[TMyPropertyPage]
При создании новая страница свойств будет наследована от класса TPropertyPage.
Фабрики объектов в среде DAX
Delphi предоставляет клиентам (контроллерам) объекты серверов СОМ посредством использования фабрик (factories) объектов, которые регистрируются с глобальным сервером СОМ Delphi СОМ Server (ComServer), определенным в модуле ComServ. Сервер СОМ Delphi обрабатывает все запросы объектов СОМ и создает запрашиваемые объекты, если такие зарегистрированы. Классы фабрик объектов используются для поддержки объектов СОМ, типизированных объектов СОМ, объектов автоматизации элементов управления, которые показаны ниже в порядке наследования.
TComObjectFactory
TActiveXPropertyPageFactory
TTypedComObjectFactory
TAutoObj ectFactory
TActiveXControlFactory
TActiveFormFactory
Классы TActiveXControlFactory и TActiveFormFactory используются для регистрации элементов управления ActiveX и форм ActiveForm.
Что же делают эти объекты? Они инкапсулируют интерфейс IClassFactory, используемый для создания объектов с ответствующего класса каждый раз, когда клиентское приложение запрашивает определенный объект. На эти классы также возложена ответственность за внесение записей в реестр Windows в соответствии с типом класса фабрики. Например, класс TActiveXControlFactory вносит в реестр информацию о сервере ActiveX и соответствующей библиотеке типов.