ActiveX. CBuilder
Бережок А.Ю.
Разработка ActiveX в среде CBuilder
Если быть предельно кратким, ActiveX - это старая добрая технология OLE (Object Linking and Embedding, "связывание и встраивание объектов"), появившаяся впервые вместе с Windows 3.1 еще в 1991 году. Сейчас Microsoft пытается приспособить OLE для наполнения WWW интерактивным содержимым, а тем самым - и для тесной, но максимально прозрачной для пользователя интеграции сетевых ресурсов с операционной системой Windows.
Как и OLE, ActiveX представляет собой довольно пестрый набор разнородных технологий, объединенных скорее общей идеологией, чем каким-то единым стандартом. Для начального ознакомления принято разделять букет ActiveX на три части - органы управления (ActiveX controls), сценарии (ActiveX scripts) и документы (ActiveX documents). |
Связь Explorer и ActiveX
Органы управления ActiveX подключаются к HTML-документам с помощью тега <OBJECT>.
<OBJECT
ALIGN=BASELINE|CENTER|LEFT|MIDDLE|RIGHT| TEXTBOTTOM|TEXTMIDDLE|TEXTTOP
BORDER= число
CLASSID= URL
CODEBASE= URL
CODETYPE= MIME-тип
DATA= URL
DECLARE HEIGHT= число
HSPACE= число
ID= идентификатор
NAME= идентификатор
SHAPES STANDBY= текст
TYPE= MIME-тип
USEMAP= URL
VSPACE= число
WIDTH= число
> </OBJECT>
|
ActiveX элемент «Wacher»
Суть работы элемента состоит из пунктов:
Элемент запускается в виде изображения циферблата со стрелками, показывающими текущее время.
По желанию пользователь может переключится в режим отображения списка процессов. Переход к списку процессов производится путем двойного нажатия левой кнопкой мыши в области ActiveX элемента.
На странице списка процесcов имеется две кнопки: "To clock", "Stop process". Первая кнопка реализует обратный переход к отображению часов. А вторая кнопка производит снятие выполнения процесса. Ниже представлен сама ActiveX форма.
Страница с Activex элементом
|
Если нет желания загружать...
На рисунках изображен элемент в работе... |
Этапы создания ActiveX с помощью CBuilder
1) Необходимо разработать обычную EXE программу с помощью стандартных форм. Довести ее до полной работоспособности и устранить ошибки. Разработка "с нуля" ActiveX элемента как ActiveX форму достаточно сложная задача и требует определенных навыков и знание технологии. Поэтому в начале следует доработать программу как стандартную форму на VCL компонентах.
2) VCL технология позволяет быстро переносить одинаковые элементы в разные типы проектов. на этом этапе необходимо создать ActiveX форму.
File->New->Other->ActiveX->ActiveX Form
3) В "ActiveX Form Wizard" ввести название элемента, название проекта изменится автоматически. Для сохранения авторства (лицензия), необходимо поставить галочку напротив пункта "Make Control Licensed".
После этого будут сгенерированы файлы *Impl.cpp, *_TLB.cpp, *_ATL.cpp (и h-файлы)
В файле TLB будут сгенерированы все стандартные методы и свойства VCL-объектов. А вот созданные ранее методы и свойства из стандартной ранее созданной формы EXE файла необходимо перенести в одноименные методы и создать одноименные свойства в Impl-файле.
4) После создания и заполнения ActiveX формы необходимо скомпилировать проект и исправить ошибки.
Project->Compile Unit
5) Установить настройки Project->Web Deployment Options
-
установить путь к OCX файлу
установить путь к будущему HTML айлу
установить виртуальный путь к OCX айлу
6) Зарегистрировать компонент:
Run->Register ActiveX Server
7) Создать результирующий файл OCX и HTML:
Project->Web Deploy |
Код файла имплементации
Методы реализации стандартных функций опущены.
Ниже приведены участки кода с пояснениями, полную версию исходников можно загрузить отсюда.
void __fastcall Twacher::Timer1Timer(TObject *Sender)
{
static int dual=0; //переменная необходимая для пропуска выполнения участка кода
int index;
TDateTime date; //переменная даты и времени
unsigned short h,m,s,p;
HANDLE HS; //переменные необходимые для составления списка процессов
PROCESSENTRY32 P;
if (Image1->Visible) //если отображается рисунок, то выполняется нижеприведеный код
{
Image1->Canvas->CopyRect(TRect(0,0,150,150),Image2->Canvas,TRect(0,0,150,150)); //восстановление рисунка подложки
date=Time(); //получение текущего времени
date.DecodeTime(&h,&m,&s,&p);
min=(float)m*6;
hour=(float)h*30+(float)m*0.5;
Image1->Canvas->Pen->Color=clBlack;
Image1->Canvas->Pen->Width=4;
Image1->Canvas->MoveTo(75,75);
Image1->Canvas->LineTo(75+(int)(sin(hour*M_PI/180)*30),75-(int)(cos(hour*M_PI/180)*30));
Image1->Canvas->Pen->Color=0x881100;
Image1->Canvas->Pen->Width=2;
Image1->Canvas->MoveTo(75,75);
Image1->Canvas->LineTo(75+(int)(sin(min*M_PI/180)*50),75-(int)(cos(min*M_PI/180)*50)); //отрисовка минутной и часовой стрелок
}
else
{
dual++;
if (dual==2)
{
for (index=0;index<ListBox1->Items->Count;index++)
{
CloseHandle((HANDLE)ListBox1->Items->Objects[index]); //уничтожение старых дескрипторов процессов из списка
}
ListBox1->Clear();
HS=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //получение указателя на системный список процессов
P.dwSize=sizeof(PROCESSENTRY32);
if (Process32First(HS,&P)) //найти превый элемент системного списка процессов
{
do
{
ListBox1->AddItem(P.szExeFile,(TObject *)OpenProcess(PROCESS_ALL_ACCESS,true,P.th32ProcessID)); //сохранить имя исполняемого файла и дескриптора процесса в локальном списке
}
while (Process32Next(HS,&P)); //чтение следующего элемента системного списка процессов
CloseHandle(HS);
}
dual=0;
}
} }
Остальне функции можно найти в исходном коде. |
"+" и "-" CBuilder как среды разработки ActiveX компонента
CBuilder предоставляет очень удобную среду разработки, которая сходна с разработкой обычных форм стандартных исполняемых модулей. Недостаток разработанного компонента состоит в его сравнительно больших конечных размерах. Минимальный скомпилированный и оптимизированный проект на CBuilder (с отключенными Dinamic Libraries & Packages для 100% запускаемости на любой другой машине) составляет примерно 600 килобайт. Дальше рост размера программы происходит достаточно медленно, но эта стартовая отметка весьма существенна при загрузке страниц с ActiveX элементом. В упакованном состоянии этот предел уменьшается в два раза. |
Выводы
Стандарт ActiveX позволяет программным компонентам взаимодействовать друг с другом по сети независимо от языка программирования, на котором они написаны. С помощью ActiveX можно "оживить" страницы Web эффектами мультимедиа, интерактивными объектами или сложными приложениями. ActiveX обеспечивает некий "скрепляющий раствор", с помощью которого отдельные программные компоненты на разных компьютерах "склеиваются" в единую распределенную систему.
Основные преимущества использования технологии ActiveX:
-
Быстрое написание программного кода. Программирование сетевых взаимодействий становится очень похожим на программирование для отдельного компьютера.
-
Открытость и мобильность. Спецификации технологии недавно были переданы в Open Group как основа открытого стандарта. Кроме того, Microsoft совместно с компаниями Metrowerks и Bristol заканчивает реализацию технологий ActiveX для платформ Macintosh и UNIX.
-
Возможность написания приложений с использованием знакомых средств разработки. Программные элементы ActiveX могут быть созданы с помощью Visual Basic, Visual C++, Borland Delphi, Borland C++, любых средств разработки на Java.
-
Большое количество уже существующих программных элементов ActiveX, которые бесплатно могут применяться на серверах Web и в приложениях независимых разработчиков. Кроме того, почти любой программный компонент OLE совместим с технологиями ActiveX и может применяться без модификаций в сетевых приложениях.
-
Стандартность. Технология ActiveX основана на широко используемых стандартах Internet (TCP/IP, HTML, Java) с одной стороны и стандартах, введенных в свое время Microsoft и необходимых для сохранения совместимости (COM, OLE).
Существенным недостатком ActiveX технологии, по сравнению, например, с Явой, понижение безопасности. Ведь ActiveX компонент, фактически, представляет собой исполняемый модуль, которому даются полномочия EXE файла. Поэтому ожесточенная борьба с хакерством и методы повышения безопасности привели к определенным трудностям в разработки ActiveX компонент. Это можно пронаблюдать по наличию большого числа пунктов загрузки и установки компонента на локальной машине. Но, в целом, ActiveX - технология подающая надежды... |
Литература
1) "Как связать ActiveX и Internet Explorer" http://www.tvoyomsk.com
2) "Технологии ActiveX" Microsoft HTML Help |
|