Шаг 6.
ActiveX. Получение информации о контейнере

    На этом шаге мы рассмотрим интерфейс, позволяющий получить информацию о контейнере.

    При установке элемента управления ActiveX на форму можно с помощью инспектора объектов изменять его свойства. Новые значения свойств можно проанализировать во время разработки или выполнения приложения, если использовать интерфейс IAmbientDispatch. Для иллюстрации этой возможности в проект из предыдущего шага добавим константу Verb3=4 (непонятно почему, но для значения константы Verb3=3 результат не получается!).

    В секции initialization добавим строку:

    AddVerb(Verb3,'Container Info');
и метод PerformVerb перепишем:
procedure TButtonX.PerformVerb(Verb: Integer);
var
  Site:IOleClientSite;
  Ambients: IDispatch;
  S: String;
begin
  case Verb of
    Verb1: ShowMessage('Первое дополнительное меню выполнено');
    Verb2: ShowMessage('И второе тоже');
    Verb3:
      begin
         GetClientSite(Site);
         if Site<>nil then Site.QueryInterface(IDispatch, Ambients);
         if Ambients<>nil then
           begin
            S:='Имя компонента = '+IAmbientDispatch(Ambients).DisplayName+#13+#10+
               'Local ID = '+IntToStr(IAmbientDispatch(Ambients).LocaleID)+#13+#10+
               'Цвет формы = '+IntToStr(IAmbientDispatch(Ambients).BackColor)+
                      #13+#10+
               'Цвет контейнера = '+IntToStr(IAmbientDispatch(Ambients).ForeColor)+
                      #13+#10;
            ShowMessage(S);
           end;
      end;
  else inherited PerformVerb(Verb);
  end;
end;

    После этого необходимо вновь зарегистрировать сервер в системном реестре, выполнив пункт меню Run | Register ActiveX Server (Выполнить | Зарегистрировать Сервер ActiveX) (напомним, что это необходимо делать после любого редактирования исходного текста элемента ActiveX). Затем можно поместить полученный ActiveX на форму и, при нажатии правой кнопки и выборе пункта меню Container Info, появится следующее окно диалога:


Рис.1. Окно диалога

    Это окно содержит информацию о контейнере, в частности, имя компонента, как он определен на форме, информацию о цвете формы и контейнера.

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

    Отметим, что используя IAmbientDispatch, можно лишь опросить контейнер о значениях свойств, но изменить свойства контейнера нельзя.

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

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




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