На этом шаге мы рассмотрим интерфейс, позволяющий получить информацию о контейнере.
При установке элемента управления ActiveX на форму можно с помощью инспектора объектов изменять его свойства. Новые значения свойств можно проанализировать во время разработки или выполнения приложения, если использовать интерфейс IAmbientDispatch. Для иллюстрации этой возможности в проект из предыдущего шага добавим константу Verb3=4 (непонятно почему, но для значения константы Verb3=3 результат не получается!).
В секции initialization добавим строку:
AddVerb(Verb3,'Container Info');
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 инспектором объектов.