Створення елементів управління ActiveX за допомогою C + + Builder, C / C + +, Програмування, статті

1. Що таке ActiveX


Технологія ActiveX, що розглядається в даній статті, базується на технології Microsoft COM (Component Object Model – модель компонентних об'єктів), що дозволяє створювати і використовувати програмні компоненти, мають різні сервіси іншим додаткам, компонентів та операційній системі. COM являє собою одну з реалізацій концепції розподілених обчислень, що базується в загальному випадку на наданні можливості програмам використовувати для розширення своєї функціональності готові компоненти та об'єкти (іноді вони називаються сервісами). Технологія COM дозволяє використовувати об'єктно-орієнтована підхід не в рамках однієї програми, а в рамках операційної системи, але, на відміну від стандартних класів, визначених в початковому тексті і реалізованих як об'єкти в адресному просторі одного процесу, ці компоненти можуть у загальному випадку розташовуватися в адресних просторах різних процесів і навіть на різних комп'ютерах.

В даний час існують три типи специфікацій COM, визначених Microsoft і включають велику кількість інтерфейсів і функцій:


Використання COM, і, зокрема, технології ActiveX, дозволяє забезпечити створення додатків, що збираються з готових компонентів – елементів керування ActiveX, що відрізняється від звичної користувачам C + + Builder або Delphi розробки додатків за допомогою VCL-компонентів тим, що така "збірка" не залежить від того, якою мовою написані як готові компоненти, так і використовує їх застосування – лише б засіб розробки підтримувало можливість використання таких компонентів в додатку, що розробляється (такий додаток зазвичай називається контейнером).

Елементи управління ActiveX є бібліотеки, що містять виконуваний код. Як було сказано вище, ці бібліотеки можуть бути використані в різних додатках як вбудовані елементи управління, тому вони мають властивості, подіями і методами, доступними за допомогою автоматизації. Сучасні засоби розробки, як правило, дозволяють включати такі елементи в створювані з їх допомогою програми. Крім цього, елементи управління ActiveX нерідко використовуються як розширень web-броузерів з метою надання їм додаткової функціональності, наприклад, для відображення документів, відмінних від підтримуваних даним броузером.

Як будь COM-сервер, елемент керування ActiveX володіє унікальним ідентифікатором GUID і повинен бути зареєстрований в реєстрі. На підставі цього запису може бути здійснено пошук місця розташування файлу з розширенням *. ocx, що містить його реалізацію.

Таким чином, створивши елемент керування ActiveX, що володіє цікавить Вас функціональністю, Ви можете надалі дозволити його користувачам вбудовувати цей елемент у свої програми (наприклад, написані на Visual Basic, PowerBuilder, Delphi, C + + Builder та ін), відображати його в web-броузері у складі вивантажених з Вашого web-сервера HTML-сторінки, включати його до складу документів MS Office, при цьому Ви не зобов'язані надавати вихідний текст цього компонента.

Коли слід створювати управляючі елементи ActiveX? Природно, в тих випадках, коли функціональність, що міститься в такому елементі, унікальна. Немає сенсу створювати ActiveX, який реалізує функціональність кнопки або текстового редактора – таких елементів управління, у тому числі виконаних у вигляді ActiveX, на ринку готових компонентів більш ніж достатньо. Немає сенсу також створювати ActiveX, якщо він буде використовуватися тільки в C + + Builder – в цьому випадку простіше створити VCL-компонент, який буде працювати в використовує його додатку значно швидше, ніж аналогічний ActiveX. Але створення елемента керування, реалізує, наприклад, частина автоматизованого робочого місця будь-якої категорії співробітників Вашого підприємства може в ряді випадків виявитися дуже корисним, особливо в наступних двох випадках. Перший випадок – використання на підприємстві різних засобів розробки, наприклад, C + + Builder і Visual Basic; в цьому випадку розробник, що використовує Visual Basic, може вбудовувати в свої програми ActiveX, створений іншим розробником і реалізує якусь функціональність, використовувану кількома різними автоматизованими робочими місцями. Другий випадок – широке використання Internet або intranet при автоматизації підприємства. У цьому випадку ActiveX, який реалізує подібну функціональність, може бути вбудований в HTML-сторінку і відображений в web-броузері. Такий підхід суттєво полегшує рішення проблеми оновлення версій автоматизованих робочих місць, тому що замість установки нових версій на робочих станціях досить замінити один примірник ActiveX, що зберігається на web-сервері. Найбільш яскравим прикладом такого підходу може бути виконаний у вигляді ActiveX "тонкий" клієнт, який отримує дані від віддаленого сервера додатків, є, у свою чергу, клієнтом серверної СУБД.

Такий набір переваг зробив цю технологію за останні два роки дуже популярною, і саме тому багато сучасні засоби розробки, такі, як Delphi або С + + Builder, дозволяють створювати елементи управління ActiveX. Ці засоби звичайно мають вбудовані механізми підтримки специфікації ActiveX за допомогою автоматичної генерації відповідного коду (хоча, звичайно, не забороняється писати подібний код вручну).

Специфікація ActiveX являє собою набір правил (а саме опис стандартних інтерфейсів), за допомогою яких слід створювати такі елементи управління. Зазначимо, що поточна версія цієї специфікації враховує можливість використання в якості контейнера web-броузерів і необхідність завантаження елементів ActiveX з віддалених web-серверів з їх автоматичною реєстрацією.

2. Створення елементів управління ActiveX на основі VCL-компонентів


Як було сказано вище, C + + Builder 3 дозволяє створювати елементи управління ActiveX на основі VCL-компонентів. Для цієї мети використовується бібліотека Microsoft ATL (Active Template Library), що є на сьогоднішній день індустріальним стандартом і дозволяє створювати елементи ActiveX, які становлять скомпільований код і не потребують додаткових run-time-бібліотек для їх виконання. Процес створення такого елемента керування досить простий.

Для створення елемента керування ActiveX слід вибрати з репозитарія об'єктів сторінку ActiveX і далі – елемент ActiveX Control.

Далі слід заповнити з'явилася діалогову панель:



Рис. 1. Вибір імені ActiveX, імен модулів і базового VCL-класу


Слід вибрати VCL-компонент, на основі якого буде створено елемент керування ActiveX. Як приклад виберемо TCalendar.

Відзначимо, що при виборі опції Include Design-Time Licence автоматично згенерує файл з розширенням *. lic, без якого даний ActiveX не можна буде використовувати ні в яких засобах розробки, але можна постачати з готовими додатками. Використання такого файлу буває зручно у випадку, коли ActiveX поставляється безкоштовно його автором у складі готового продукту, але вимагає окремого ліцензування при вбудовуванні його іншими користувачами в свої розробки.

В результаті роботи ActiveX Control Wizard будуть створені кілька модулів, згенерований унікальний ідентифікатор (GUID) майбутнього ActiveX, а також відповідна бібліотека типів.



Рис. 2. Проект бібліотеки ActiveX в С + + Builder


Бібліотека типів містить відомості про властивості, події і методах компонента ActiveX, успадкованих від вихідного VCL-компонента.



Рис. 3. Бібліотека типів створеного елемента ActiveX


У коді, пов'язаному з реалізацією ActiveX, можна знайти опис цих властивостей і методів.

Далі слід зберегти і скомпілювати проект і зареєструвати елемент ActiveX у реєстрі. Це робиться за допомогою вибору пункту меню Run / Register ActiveX Server.

Після цього можна протестувати створений ActiveX-компонент, відкривши його, наприклад, в Visual Basic. Відзначимо, що останні версії саме цього засобу розробки широко використовують елементи управління ActiveX в якості складових частин створюваних з їх допомогою програм; фактично програми Visual Basic зібрані цілком з ActiveX-компонентів. Більше того, специфікація ActiveX створена з урахуванням того, що в першу чергу Visual Basic і Visual C + + (і лише потім інші засоби розробки) можуть бути контейнерами для цих елементів управління. Тому тестування поведінки ActiveX в VisualBasic може більше -менш гарантувати, що в інших засобах розробки цей керуючий елемент буде вести себе так само.

У разі відсутності Visual Basic можна скористатися й більш широко поширеним Visual Basic for Applications. З цією метою можна запустити Microsoft Word 97, створити новий документ і вибрати на панелі інструментів кнопку "Редактор Visual Basic". Далі слід вибрати у вікні "Project" ім'я новоствореного документа, клацнути по ньому правою кнопкою миші і з отриманого контекстного меню вибрати опцію "Вставити / UserForm". На екрані з'явиться редактор форм Visual Basic і панель елементів. Далі потрібно натиснути правою кнопкою миші на панелі елементів і вибрати з контекстного меню опцію "Додаткові елементи ". Тепер слід із списку всіх зареєстрованих елементів управління ActiveX вибрати потрібний, і він автоматично опиниться на панелі елементів Visual Basic (можна помістити його на єдину наявну сторінку керуючих елементів або створити свою, вибравши опцію "Створити сторінку" з контекстного меню ярликів блокнота, розташованого на панелі елементів).

Після цього можна помістити наш ActiveX на форму і спробувати змінити якісь його властивості, використовуючи для цієї мети вікно "Властивості".



Рис. 4. Тестування ActiveX у Visual Basic


І, нарешті, можна повернутися в редагований документ, помістити на нього кнопку, двічі клацнути по ній і у вікні редактора коду створити процедуру, яка ніколи створену форму, вписавши в згенерований код рядок UserForm1.Show:

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

Тепер можна натиснути на панелі інструментів "Visual Basic" кнопку "Вихід з режиму конструктора". Після цього натиснення на створену в тілі документа кнопку призведе до появи діалогової панелі зі створеним нами елементом управління.

Можна було б, звичайно, протестувати поведінка створеного ActiveX, встановивши його в палітру компонентів Delphi або C + + Builder,, але це не найкращий спосіб тестування – адже в основі створення нашого ActiveX лежить та ж сама бібліотека VCL, що і в основі створюваного програми для тестування ActiveX. Використання для цієї мети будь-якого не має відношення до VCL засоби розробки, здатного використовувати елементи керування ActiveX у створюваних додатках, більш виправдано. При цьому слід зауважити, що Visual Basic for Applications являє собою найбільш часто зустрічається засіб розробки такого класу, оскільки входить до складу самого популярного в нашій країні офісного пакету.

3. Створення сторінок властивостей


Так як елементи керування ActiveX можуть бути використані в засобах розробки, нерідко вони мають набір сторінок властивостей, що дозволяє користувачам змінювати ті чи інші властивості цього елемента керування.

Для створення сторінки властивостей виберемо з репозитарія об'єктів сторінку ActiveX і елемент Property Page. В результаті отримаємо форму, на якій можна розміщувати інтерфейсні елементи.

Створимо сторінку для редагування властивостей CalendarDate і GridLineWidth. Для цього розмістимо на новоствореної формі два компоненти TStaticText і два компоненти TEdit.



Рис. 5. Сторінка властивостей на етапі проектування


У створеній формі є згенеровані прототипи обробників подій UpdatePropertyPage і UpdateObject. Додамо в них відповідний код:

void __fastcall Tpp2f::UpdatePropertyPage(void)
{
Edit1->Text=OleObject.OlePropertyGet(“CalendarDate”);
Edit2->Text=OleObject.OlePropertyGet(“GridLineWidth”);
}
//———————————————–
void __fastcall Tpp2f::UpdateObject(void)

{
OleObject.OlePropertySet ("CalendarDate", Variant (Edit1-> Text));
OleObject.OlePropertySet ("GridLineWidth", Variant (Edit2-> Text));
}

Далі слід створити посилання на сторінці властивостей в модулі, що описує реалізацію елемента ActiveX. З цією метою слід модифіковані h-файл. Модифікація коду полягає у вставці рядка, що вказує на необхідність реєстрації сторінки властивостей:

BEGIN_PROPERTY_MAP(TCCX2Impl)
PROP_PAGE(CLSID_pp2f)
END_PROPERTY_MAP()

Слід також включити посилання на h-файл сторінки властивостей в h-файл реалізації ActiveX.

Далі слід заново скомпілювати бібліотеку ActiveX і зареєструвати її.

Якщо тепер в середовищі розробки Visual Basic помістити на призначену для користувача форму наш ActiveX і вибрати сторінку властивостей "Спеціальні", отримаємо створену нами сторінку:



Рис. 6. Сторінка властивостей на етапі тестування ActiveX


При зміні значень для компонентів TEdit можна переконатися, що змінюються і відповідні властивості елемента ActiveX.



Рис. 7. Результат використання сторінки властивостей


4. Створення активних форм


Активна форма – це елемент керування ActiveX, що містить кілька VCL-компонентів. Можливість створення таких елементів управління дозволяє істотно розширити коло доступних для елементів ActiveX функціональних можливостей. Створення такого ActiveX відбувається приблизно так само, як і створення звичайного застосування.

Спробуємо створити найпростіший приклад такого елемента керування. Для його створення слід вибрати зі сторінки ActiveX сховища об'єкт ActiveForm, відповісти на питання про ім'я компонента, після чого в дизайнера форм отримаємо порожню форму – заготівлю майбутнього ActiveX. Додамо на цю форму компоненти TCheckBox, TButton, TImage і TOpenPictureDialog.



Рис. 8. Активна форма на етапі проектування


Створимо оброблювачі подій, пов'язаних з TCheckBox і TButton:

void __fastcall TActiveFormX::Button1Click(TObject *Sender)
{
if (OpenPictureDialog1->Execute())
Image1-> Picture-> LoadFromFile (OpenPictureDialog1-> FileName);
}
//———————————————— —————————

void __fastcall TActiveFormX::CheckBox1Click(TObject *Sender)
{
Image1->Stretch=CheckBox1->Checked;
}


Тепер можна скомпілювати програму, зареєструвати створений ActiveX і протестувати його зазначеним вище способом.



Рис. 9. Тестування активної форми в Visual Basic


Можна також протестувати створений ActiveX c допомогою відображення його в Internet Explorer. Для цієї мети можна вибрати пункт меню Project / Web Deployment Options і на сторінці Project в полях Target dir, Target URL, HTML dir цього діалогу вказати ім'я якого-небудь локального каталогу.

Потім можна вибрати опцію Project / Web Deploy і після закінчення роботи Web Deployment Wizard відкрити в Internet Explorer автоматично згенерувала С + + Builder html-сторінку c ім'ям, що збігається з ім'ям створеного проекту:



Рис. 10. Тестування активної форми в Internet Explorer


Зазначимо, що для успішного відображення ActiveX у броузері потрібно Microsoft Internet Explorer версії 3.0 та вище, при цьому налаштування рівня безпеки повинні дозволяти запуск активного вмісту, розташованого в Intranet-зоні. Якщо як броузера використовується Netscape Navigator, він повинен бути оснащений модулем розширення (plug-in), що дозволяє інтерпретувати тег <OBJECT> мови HTML як елемент управління ActiveX (природно, така можливість існує тільки для версій Navigator, що виконуються під управлінням 32-розрядних версій Windows). Зазначимо також, що згенерувала автоматично сторінку можна надалі відредагувати за допомогою будь-якого html-редактора (або навіть будь-якого текстового редактора).

При поставці ActiveX через Web процедура аналогічна описаній, але замість локальних каталогів в рядку URL слід вказати Internet-адреса Web-сервера:



Рис. 11. Настроювання опцій поставки ActiveX через Internet


Крім цього, слід звернути увагу на додаткові "пакети" та інші файли, які слід включити в поставку, якщо опції проекту такі, що вимагають використання будь-яких додаткових бібліотек .. Поділ ActiveX на кілька файлів і виділення окремих пакетів може бути використано для того, щоб зменшити в цілому час завантаження ActiveX через Internet, наприклад, у разі необхідності майбутньої оновлення версії ActiveX або при поставці декількох різних ActiveX – в цьому випадку частина "пакетів" може бути встановлена ​​один раз, а далі проводиться поставка лише невеликий змістовної частини елемента ActiveX. Втім, не забороняється створювати ActiveX і у вигляді одного файлу. Зазначимо також, що при виборі опції Include CAB File compression можна зібрати використовувані файли в один файл з розширенням *. cab, фактично представляє собою архів, що також зменшує приблизно в два рази час завантаження файлів через Internet.

Слід зазначити, що в активних формах можна використовувати практично всі компоненти C + + Builder, крім TMainMenu. Можлива також динамічна генерація додаткових форм на етапі виконання, при цьому додаткові форми вже не будуть міститися в контейнері, а будуть представляти собою звичайні форми Windows (і, природно, можуть містити в тому числі і TMainMenu).

На закінчення відзначимо, що, редагуючи бібліотеку типів, можна до створених ActiveX додавати властивості і методи і потім описувати їх реалізацію у відповідному модулі. Більш докладно про бібліотеки типів, їх призначення, створенні, редагуванні буде розказано в наступних статтях цього циклу.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*