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.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий