Шаг 7.
ActiveX. Считывание свойств элемента ActiveX инспектором объектов

    На этом шаге мы рассмотрим интерфейс IPerPropertyBrowsing.

    Инспектор объектов (или его аналог в других средствах разработки) считывает текущее значение свойств ActiveX посредством обращения к интерфейсу IPerPropertyBrowsing. Класс TActiveXControl, который создается автоматически при генерации ActiveX, содержит виртуальные методы GetPropertyString, GetPropertyStrings, GetPropertyValue, которые вызывают интерфейс IPerPropertyBrowsing. Переписывая эти методы, можно изменять в инспекторе объектов или его аналоге строку, которая показывает текущее значение свойства. Как правило, инспектор объектов и его аналоги вполне корректно отображают свойства, представимые в виде строки, Но для свойств, которые неудобно или невозможно представить в виде строк (графические изображения, шрифт и т.п.) программисту необходимо реализовывать интерфейс IPerPropertyBrowsing.

    В качестве примера можно верпуться к проекту из предыдущего шага и попытаться модифицировать методы IPerPropertyBrowsing. Перепишем метод GetPropertyString так, чтобы курсор выделялся в квадратных скобках. Для этого в секции protected заголовка класса объявим метод, который будет записан вместо уже имеющегося:

    function GetPropertyString (DispID: Integer; var S:String): Boolean; override;
а в секции реализации опишем его:
function TButtonX.GetPropertyString (DispID: Integer; var S:String): Boolean;
begin
  if DispID=17 then
  begin
    S:='['+IntToStr(Get_Cursor)+']';
    Result:=True;
  end
  else Result:=Inherited GetPropertyString(DispID,S);
end;

    В качестве параметра GetPropertyString получает идентификатор свойства DispID, который для каждого свойства можно найти в реалицации библиотеки типов (файл ButtonXControl1_TLB). Для свойства Cursor в нашем случае он равен 17:


Рис.1. Значение идентификатора свойства Cursor

    После регистрации ActiveX и установки его на палитру компонентов (процесс установки описан в 5 шаге), разместим этот компонент на форме. Можно заметить, что курсор появляется в квадратных скобках:


Рис.2. Значение курсора в квадратных скобках

    Следует обратить внимание, что при нажатии на стрелку вниз в свойстве Cursor из выподающего списка исчезают все знгачения свойства Cursor.

    Для того чтобы заполнить выпадающий список строками, помимо реализации метода GetPropertyString нужно реализовать два других метода для данного свойства GetPropertyStrings и GetPropertyValue. Они работаюв в тесной связи друг с другом: первый метод создает строки, которые должны появляться в выпадающем списке, а второй метод формирует соответствующие им значения. Перепишем эти методы для курсора. В секции protected поместим определения методов:

    function GetPropertyStrings (DispID: Integer; Strings: TStrings): 
                       Boolean; override;
    procedure GetPropertyValue (DispID, Cookie: Integer; 
                       var Value: OleVariant); override;
а в секции реализации напишем соответствующий код:
function TButtonX.GetPropertyStrings (DispID: Integer; Strings: TStrings): Boolean;
begin
  if DispID=17 then
  begin
     Strings.Add('Первый');
     Strings.Add('Второй');
     Strings.Add('Третий');
     Result:=True;
  end
  else Result:=Inherited GetPropertyStrings(DispID,Strings);
end;
procedure TButtonX.GetPropertyValue (DispID, Cookie: Integer; 
        var Value: OleVariant);
begin
  if DispID=17 then Value:=Cookie
  else Inherited GetPropertyValue (DispID, Cookie,Value);
end;

    Соотвественно после перекомпиляции проекта и помещения измененного ActiveX на форму можно отметить, что при выборе в инспекторе объектов свойства Cursor и нажатии стрелки вниз появится список из созданных в методе GetPropertyStrings строк:


Рис.3. Перечень строк и инспекторе объектов

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

    Со следующего шага мы начнем рассматривать применение COM-объектов, входящих в состав Windows.




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