На этом шаге мы рассмотрим создание страниц свойств.
Так как элементы управления ActiveX могут быть использованы в средствах разработки, нередко они обладают
набором страниц свойств, дающим возможность пользователям менять те или иные свойства этого элемента управления,
употребляя для этого более широкий спектр интерфейсных элементов, нежели предоставляемый инспектором объектов
Delphi или его аналогами в других средствах разработки. Страницы свойств немного напоминают редакторы
свойств некоторых VCL-компонентов.
Для создания страницы свойств выберем из репозитария объектов вкладку ActiveX и элемент Property Page (Страница Параметров). В результате получим форму, на которой можно размещать интерфейсные элементы.
Создадим страницу для редактирования свойств CalendarDate (Отображаемая дата) и GridLineWidth (Толщина линий сетки). Для этого разместим на вновь созданной форме два компонента TLabel и два компонента TEdit.
Рис.1. Страница свойств на этапе проектирования
В созданной форме имеются сгенерированные прототипы обработчиков событий UpdatePropertyPage (вызывается при выводе страницы свойств Специальные (Custom)) и UpdateObject (вызывается при закрытии страницы свойств или нажатии кнопки Применить). Добавим в них соответствующий код:
procedure TPropertyPage1.UpdatePropertyPage; begin { Update your controls from OleObject} Edit1.Text:=DateToStr(OleObject.CalendarDate); Edit2.Text:=OleObject.GridLineWidth; end; procedure TPropertyPage1.UpdateObject; begin { Update OleObject from your controls} OleObject.CalendarDate:=StrToDate(Edit1.Text); OleObject.GridLineWidth:=Edit2.Text; end;
Возможность обращения к методам и свойствам OLE-объектов, неизвестным заранее, обусловлена тем, что названия этих свойств и методов рассматриваются компилятором Object Pascal как символьные строки, которые будут переданы в методе Invoke интерфейса IDispatch.
Далее следует создать ссылку на странице свойств в модуле, описывающем реализацию элемента ActiveX. Модификация кода этого модуля заключается во вставке строки, указывающей на необходимость регистрации страницы свойств, в сгенерированной процедуре DefinePropertyPages, находящейся в модуле CalendarImpl1:
procedure ТСalendarХ.DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); begin {TODO: Define property pages here. Property pages are defined by calling DefinePropertyPage with the class id of the page. For example, DefinePropertyPage(Class_CalendarXPage);} DefinePropertyPage(Class_PropertyPage1); end;
Эта страница определена в модуле, содержащем описания свойств следующей константой, которую нужно разместить в функции DefinePropertyPage (ее значение может отличаться от приведённого):
const
Class_PropertyPage1:TGUID='{9E6D2219-11DF-43E0-A3F6-79DCEF8403F7}';
Далее следует заново скомпилировать библиотеку ActiveX и зарегистрировать ее.
Если теперь в Microsoft Word поместить на пользовательскую форму наш ActiveX и выбрать страницу свойств Специальные (Custom), получим созданную нами страницу:
Рис.2. Результат использования страницы свойств
Описанный процесс тестирования компонента можно увидеть здесь (671 Kб), а взять этот клип здесь (117 Кб).
Созданный компонент ActiveX можно взять здесь (309 Кб).
На следующем шаге мы рассмотрим cоздание активных форм.