VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
ActiveX
Теория компонентов
:
Logo

Мы продолжаем знакомится с Технологией ActiveX. Мы уже познакомились с парой примеров разработки ActiveX приложений, и сегодня мы вдаримся в теорию по самые гланды. Теория будет касатся в основном самостоятельной разработки компонентов.

ActiveX - это достаточно сложная для понимания и разработки технология. Она является продолжением развития OLE, которая была пополнена технологией COM и переименована в более ёмкое назнание - ActiveX . Под этим термином скрывается несколько самостоятельных технологий:

  • Формы ActiveForm - мы с ними познакомились в самом начале.
  • Элементы управления
  • Библиотеки
  • Серверы автоматизации
  • Страницы свойств

Всё это объединяется под одним термином ActiveX.
Logo
Рис 1. Создание компонентов ActiveX

Для разработки приложений с использованием ActiveX нужно иметь достаточно много знаний и навыков. Фирма Borland упростила эту технологию как для понимания, так и для разработки создав свою надстройку - Delphi ActiveX (часто сокращается до DAX). Благодаря DAX ты можешь любой компонент Delphi превратить компонент ActiveX и использовать его в любой другой среде разработки.

Вот именно эти мы и займёмся. Сегодня мы создадим компонент ActiveX с использованием Delphi и надстройки DAX. Хотя о присутствии DAX ты можешь и не знать.

Кликай File->New и на закладке ActiveX выбирай ActiveX Control (рис 1). Кликай "ОК". Перед тобой должно открыться окно ActiveX Control Wizard , как на рис 2.

Посмотрим на содержимое окна ActiveX Control Wizard :

  • VCL Class Name - Имя компонента, который мы хотим превратить в ActiveX. Выбери из списка TPanel.
    Logo
    Рис 2. Мастер компонента ActiveX
  • New ActiveX Name - Имя ActiveX компонента (оставь по умолчанию)
  • Implementation Unit - Имя модуля (оставь по умолчанию)
  • Project Name - Имя проекта (оставь по умолчанию)
  • Threading Model - Модель потока.
  • Make Control Licensed - Лицензия компонента. Включай только если захочешь продавать свой компонент.
  • Include Version Information - Включить информацию о версии
  • Include About Box - добавить окно "About"

После нажатия пимпы "ОК", Delphi создаст заготовку для нового твоего компонента, в которой уже готовы к использованию все методы и свойства компонента TPanel. Весь исходный код реализующий компонент будет находится в модуле PanelImpl1.pas. Перейди в него и посмотри.

Здесь полно процедур и функций начинающихся словом Get_ или Set_. Зачем они нужны? В ActiveX нет свойств или переменных, весь доступ к компоненту происходит через процедуры или функции, поэтому, чтобы прочитать заголовок панели delphi создал функцию Get_Caption, а чтобы изменить заголовок на новый - Set_Caption(const Value: WideString). Немного позже мы напишем собственную реализацию изменения заголовка.

Вся информация о методах компонента находится в библиотеке типов. Чтобы её увидеть выбери Type Library из меню View (рис 3).

Logo
Рис 3. Библиотека типов

Когда ты вибираешь какой-нибудь элемент библиотеки, в правой стороне окна появляется несколько закладок. На закладке Attributes ты можешь видеть:

  • Name - имя объекта
  • GUID - уникальный номер в библиотеке (менять не советую)
  • Version - версия
  • LCID - Идентификатор языка
  • Help String - Краткое описание
  • Help File - Имя Help файла связанного с объектом
  • Help Context - Идентификатор контекста справки

Некоторые из флагов:

  • None - Флаги отсутствуют
  • Restricted - Запретить использование библиотеки в средах программирования макросов
  • Control - В библиотеке находится компонент ActiveX
  • Hidden - Библиотека скрыта от пользователей
  • DispInterface - достук к свойствам и методам производится только через IDispatch.
  • Nonextensible - Если выделен, то реализация интерфейса IDispatch (основной интерфейс ActiveX) будет включать только те свойства и методы, которые показаны в реализации.
  • Dual - Методы и свойства интерфейса передаются и через IDispatch, и таблицу виртуальных методов.
  • OLE Automation - используются только совместимые с автоматизацией типы данных.
  • Source - указывает, что возвращаемое значение является типа VARIANT, являющееся источником событий
  • Bindable - свойство поддерживает связывание данных
  • Request Edit -свойство поддерживает сообщение OnRequestEdit

Небольшое отступление: Интерфейс в библиотеке типов ActiveX, это набор определений свойств и методов. Программа-клиент может получить доступ к интерфейсам (методам) через специальный интерфейс IDispatch,либо через таблицу виртуальных методов. Интерфейс IDispatch позволяет использовать свойства и методы объектов через уникальный идентификатор DispID.
Logo
Рис 4

Давай создадим собственный метод. Для этого выдели ветку IPanelX и щёлкни по кнопке Logo. Delphi создаст новое объявление метода Method1 . Переименуй его в SetCap. Delphi создаст процедуру SetCap, которая будет является реальзацией метода SetCap. Перейди на Parametrs (рис 4) и добавь новый параметр для процедуры с именем Caption с типом LPSTR, и Modifier равный [in].

Чтобы изменить Modifier нужно дважды щёлкнуть по нему (рис 5). Здесь тебе доступны:
Logo
Рис 5

  • In - означает, что метод является процедурай и используется для установки значений
  • Out - Говорит о том, что метод будет считывать значение компонента
  • RetVal - метод будет возвращать значение

Теперь перейди в модуль PanelImpl1.pas и найди процедуру эту SetCap и напиши в ней следующее:

procedure TPanelX.SetCap(Caption: PChar);
begin
 FDelphiControl.Caption:=Caption;
end;

FDelphiControl указывает на компонент TPanel. С помощью SetCap мы изменяем свойство Caption у TPanel, то есть наш метод делает то же, что и Set_Caption.
Logo
Рис 6

Теперь создадим свойство. Кликни по кнопке New Property и выбери "read | write" (рис 6). Delphi создаст два метода: один для чтения свойства, а другой для записи. Переименуй их в MyProp. В модуле PanelImpl1 у тебя появится две новые процедуры:

function TPanelX.Get_MyProp: Integer;
begin

end;

procedure TPanelX.Set_MyProp(Value: Integer);
begin

end;

Можешь их реализовать, но я не стал. Мне главное было показать, как это делается. Зарегестрируй новый компонент в системе (Run->Register ActiveX Server). Теперь можешь установить его на палитру компонентов (Component->Import ActiveX Control) и протестировать. После регистрации, компонент будет практически не виден на палитре, потому что у него не будет иконки. Чтобы найти свою панель, перейди на закладку ActiveX и проведи мышкой по палитре компонентов. Самой правой окажется PanelX.

Для теста нужно:

  • Создай новый проект
  • Поставь на форму новый компонент
  • Поставь кнопку и напиши по её событию:
procedure TForm1.Button1Click(Sender: TObject);
begin
 PanelX1.SetCap('привет');
end;

Вот и всё.


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©