Шаг 5.
ActiveX. Использование собственных диалогов на этапе разработки элементов управления ActiveX

    На этом шаге мы рассмотрим использование собственных диалогов на этапе разработки элементов управления ActiveX.

В некоторых случаях использование страниц свойств элементов управления ActiveX не представляется возможным или не является достаточным для реализации механизмов управления этим элементом. В этом случае разработчик может создавать и использовать свои собственные диалоги вместо страниц свойств или в дополнение к ним. При разработке элемента ActiveX имеется возможность создания дополнительных элементов меню, которые будут видны на этапе разработки приложения, использующего данный элемент управления.

    Для иллюстрации этой возможности создадим элемент управления ActiveX на основе VCL-компонента TButton. С этой целью создадим новую библиотеку ActiveX, выберем из главного меню опцию File | New (Файл | Создать) и со страницы репозитария ActiveX выберем элемент ActiveX Control (Компонент ActiveX). Выберем TButton в качестве VCL-компонента, который следует конвертировать в ActiveX.

    Далее в модуле реализации выполним следующие изменения:

  1. В секции private определим метод PerformVerb:
      procedure PerformVerb(Verb:integer); override;
    
  2. В секции implementation определим две константы и напишем реализацию метода PerformVerb (файл ButtonImpl1):
    .  .  .  .  .
    const
    Verb1=1;
    Verb2=2;
    .  .   .  .  .
    procedure TButtonX.PerformVerb(Verb:Integer); 
    begin
      case Verb of
        Verb1:ShowMessage('Первoe дополнительное меню выполнено');
        Verb2:ShowMessage('И второе тоже'); 
        else inherited PerformVerb(Verb);
      end;
    end;
    
  3. Изменим секцию initialization, как показано ниже (изменения выделены курсивом):
    initialization
    with
    TActiveXControlFactory.Create(
       ComServer, TButtonX, TButton,
       Class_ButtonX,1,'',0,tmApartment)
    do begin
       AddVerb(Verb1,'Copyright (C)');
       AddVerb(Verb2,'2004 by A.Medvedev');
    end;
    

    После регистрации созданного элемента управления ActiveX его нужно поместить в палитру компонентов. Для этого нужно выполнить пункт меню Component | Import ActiveX Control (Компоненты | Импорт Компонента ActiveX). На экране появится окно, в котором нужно выбрать устанавливаемый компонент ActiveX (рис.1). Список Palette Page (Закладка) определяет страницу палитры компонентов, в которой будет находиться устанавливаемый элемент.


Рис.1. Окно выбора устанавливаемого ActiveX

    После нажатия на кнопку Install (Установить) появляется одноименное окно, где выбирается пакет, в котором будет находиться устанавливаемый компонент.


Рис.2. Окно выбора пакета

    По умолчанию все пользовательские компоненты находятся в пакете dclusr.dpk.

    После нажатия кнопки OK на экране появится окно с содержимым пакета dclusr.dpk (рис.3) и через некоторое время сообщение о том, что компонент успешно установлен. При закрытии этого окна необходимо сохранить изменения.


Рис.3. Окно с содержимым пакета dclusr

    После регистрации созданного элемента управления ActiveX и установки его в палитру компонентов можно поместить его на форму. Если на этапе разработки нажать правую клавишу мыши над этим элементом управления, появится меню (рис.4). При выборе соответствующих элементов меню будут возникать сообщения, которые были определены в реализации метода PerformVerb.


Рис.4. Дополнительные элементы меню ActiveX

    При создании активной формы можно таким же образом добавить новые элементы в меню. Однако в базовом классе активной формы метод PerformVerb (или другой аналогичный метод, который можно было бы переписать) не определен. Поэтому создать какие-либо обработчики событий, связанных с выбором пользователем элементов этого меню, не представляется возможным.

    В документации по Delphi сказано, что идентификаторы меню (константы Verb1 и Verb2 в проекте) должны быть небольшими целыми числами. В действительности если этим идентификаторам присвоить значения, равные, например, 101 и 102, то никаких новых элементов в меню не появится. Идентификатор 0 зарезервирован для страниц свойств, поэтому дополнительные идентификаторы меню должны быть равны единице или больше. Значение 0 следует использовать, если по каким-либо причинам желательно скрыть элемент меню Properties, инициирующий появление страниц свойств.

    В заключение рассмотрим, как можно убрать из палитры компонентов установленный туда компонент. Для этого нужно выполнить пункт меню Component | Install Packages (Компоненты | Установить Пакеты), в появившемся окне (рис.5) выбрать нужный пакет и нажать клавишу Edit (Изменить).


Рис.5. Окно выбора пакета

    После появления окна, изображенного на рисунке 3, достаточно выделить файлы, относящиеся к компоненту (в нашем случае это файлы, расположенные в папке Contains), и нажать кнопку Remove (Удалить). После удаления всех файлов нужно перекомпилировать пакет, нажав на кнопку Compile (Компилировать). Не забудьте сохранить изменения в пакете перед закрытием окна.


    Примечания.
  1. Не забудьте в модуле, где используется функция ShowMessage, в секцию Uses поместить модуль Dialog, содержащий описание этой функции.

  2. При регистрации компонента в системном реестре делаются соответствующие записи. Чтобы разрегестрировать компонент, нужно загрузить его реализацию в среду программирования Delphi и выполнить пункт меню Run | Unregister ActiveX Server (Выполнить | Удалить Регистрацию Сервера ActiveX).

    Созданный компонент ActiveX можно взять здесь (265 Кб).

    На следующем шаге мы рассмотрим способ получения информации о контейнере.




Предыдущий шаг Содержание Следующий шаг