Технологія COM (Component Object Model) активно розвивалася корпорацією Microsoft протягом останніх кількох років і продовжує розвиватися і підтримуватися до сих пір. Тому сьогодні існує безліч публікацій, в яких пояснюються принцип роботи і призначення COM-об'єктів. Відповідно і технологія ActiveX, як один із напрямів COM, також широко обговорюється в пресі. Є досить літератури, де докладно розповідається про принцип роботи і призначення елементів управління ActiveX, про їх створення, використання, додаванні нових властивостей і методів, про створення нових обробників подій і т.д. Разом з тим деякі аспекти створення і використання елементів управління ActiveX і раніше не цілком висвітлені в літературі. Ця публікація частково заповнює наявні прогалини в доступних читачам описах створення і роботи елементів управління ActiveX. У ній буде розказано про створення обробників подій в HTML-документах, будуть розглянуті проблеми безпеки елементів управління ActiveX і динамічного звернення до них. Як засіб розробки прикладів використовується Delphi 6. Передбачається, що читач має досвід роботи з цим засобом розробки і, зокрема, володіє основами застосування COM і створення елементів управління ActiveX в Delphi.
Додавання нових властивостей і обробників подій в елемент управління ActiveX.
Тестування ActiveX в HTML-документі
оздадім новий елемент управління ActiveX за допомогою пункту меню Delphi File | New | Other ..., виберемо закладку ActiveX і викличемо експерт ActiveX Library. Збережемо проект під ім'ям AXTest. Потім знову звернемося до пункту меню File | New | Other ... | ActiveX і викличемо експерт Active Form. У діалозі змінимо властивість New ActiveX Name на AFTest. На отриману форму помістимо мітку (TLabel) і кнопку (TButton).
На відміну від випадку визначення нового властивості елемента управління ActiveX, при створенні нового події після виконання команди Refresh в модулі AFTestImpl1.pas чи не з'явиться ніяких заготовок для реалізації коду. І це зрозуміло: код для обробки події буде реалізований в клієнтському додатку, яке буде використовувати даний елемент управління ActiveX. У самому ж елементі керування ActiveX необхідно викликати цей обробник. Оскільки було вирішено, що створене подія пов'язана з натисканням кнопки Button1, то викликаємо його з методу Button1.OnClick:
Перевірка if FEvents <> nil обов'язкове, так як клієнтську програму може не підтримувати нотифікаційні інтерфейс, і в цьому випадку спроба виклику неіснуючого методу призведе до виключення.
Отже, виконаємо команду меню Project | WEB deployment options і заповнимо діалог (рис. 3).
Якщо цю картинку отримати не вдалося, то подальші дії не приносять користі. Причини, за якими не вдається запустити елемент керування ActiveX в Microsoft Internet Explorer, можуть бути наступними:
- не встановлено IIS або PWS;
- неправильно заповнені опції в діалогової панелі WEB Deployment Options;
- система безпеки не знижена до Low-рівня.
Створення обробників подій в HTML-документах
Для створення обробника подій в HTML-документі скористаємося попереднім проектом. У створений файл AXTest.htm внесемо такі зміни (доданий код виділений жирним шрифтом):
Для роботи зі скриптовими мовами елемент управління повинен володіти ідентифікатором (id = в тезі
Звернувшись до цієї сторінки з Microsoft Internet Explorer і натиснувши кнопку Run script, можна побачити зміни заголовка мітки (рис. 5).
Якщо елемент керування ActiveX содавать за допомогою Delphi 3, то при спробі виконання скрипта при деяких налаштуваннях Microsoft Internet Explorer може з'явитися повідомлення браузера про потенційно небезпечний вміст програми. Як цього уникнути, розповідається в наступному розділі.
Система безпеки Microsoft Internet Exprorer і цифровий підпис
Електронний підпис, крім відомостей про фірму-виробника, несе і ряд іншої корисної інформації. Так, наприклад, якщо файл * .OCX був змінений після додавання електронного підпису, то про це буде негайно повідомлено перед запуском такого елемента управління.
Для комерційної розробки елементів управління ActiveX бажано придбати Microsoft ActiveX SDK. Крім детальної документації і ряду корисних ресурсів він містить програму MAKECER, яка генерує тестові сертифікати.
Таким чином, отримання міжнародного електронного сертифіката в нашій країні представляє сьогодні серйозну проблему. У той же час відсутність у користувача електронного підпису призводить або до постійних нагадувань йому про це (або навіть до заборони на завантаження елементів управління ActiveX при високому рівні безпеки браузера), або змушує його відключити систему безпеки Internet. Звичайно, наявність електронного сертифіката не гарантує відсутність потенційно небезпечного вмісту, але, по крайней мере, дозволяє клієнту встановити джерело небезпечного вмісту. Крім того, він перекодує файл з використанням сучасних шифрувальних алгоритмів і підраховує контрольні суми. Якщо хто-небудь спробує внести зміни в код елемента керування ActiveX, така спроба буде негайно виявлена за допомогою контрольних сум і цей елемент управління ActiveX не працюватиме в Microsoft Internet Explorer. Тому наявність електронного підпису бажано навіть при роботі в інтрамережі, а вже при роботі елемента управління ActiveX в Internet вона просто необхідна.
Повернемося до попереднього проекту. Всі тести, описані тут, виконані з Microsoft Personal Web Server 5.0. і Microsoft Internet Explorer 5.0. Рівень безпеки Microsoft Internet Explorer слід встановити рівним Сustom. Значення всіх опцій, що відносяться до елементів управління ActiveX в постає при цьому діалозі, встановимо рівними Prompt.
а також скрипт c обробником події OnBtClick, як це описано в попередньому розділі. Потім можна почати тестувати систему безпеки Microsoft Internet Explorer.
Після першого звернення до HTML-сторінці, що містить ActiveX, відбувається його завантаження і він копіюється в каталог WINNT \ Downloaded Program Files. Далі перевіряється наявність електронного підпису (яка в нашому випадку відсутній). Якщо рівень захисту, встановлений в Microsoft Internet Explorer, відповідає Low, користувач отримає повідомлення про те, що може бути запущено на виконання потенційно небезпечний вміст. Якщо користувач не заперечує проти цього, то відбувається реєстрація отриманого файлу * .OCX в системному реєстрі і за допомогою інтерфейсу IPersistPropertyBag зчитуються його властивості з HTML-сторінки (див. Вище). При цьому відновлюється діалог, з якого стає ясно, що хоча наш елемент управління і безпечний, але до нього можуть звертатися з скриптів (рис. 6).
Крім того, слід звернути увагу на опцію «Initialize and script ActiveX controls not marked as safe» в діалогової панелі Security Settings браузера Microsoft Internet Explorer. Хоча значення опції було встановлено рівним Prompt і з HTML-документа проводиться ініціалізація параметра URL, попередження не було отримано. Таким чином, Microsoft Internet Explorer вважає даний елемент управління ActiveX безпечним з точки зору ініціалізації даних і виконання скриптів.
Причина цього полягає в тому, що елементи керування ActiveX, Створено з допомогою версій Delphi старше 3-й, підтримують інтерфейс IObjectSafety. У цьому інтерфейсі визначаються два методи:
INTERFACESAFE_FOR_UNTRUSTED_CALLER (= 1, дозволяє анонімний доступ до інтерфейсу)
INTERFACESAFE_FOR_UNTRUSTED_DATA (= 2, дозволяє анонімному користувачу посилати дані в інтерфейс).
Припустимо, що творець елемента управління ActiveX вважає, що при виконанні скриптів або при некоректній ініціалізації даних цей елемент управління може нанести клієнтові шкоди. В такому випадку він зобов'язаний переписати реалізовані методи IObjectSafety. Якщо елемент керування ActiveX реалізований в класі TActiveXControl, то це не складає труднощів, оскільки обидва методи IObjectSafety оголошені віртуальними в секції protected. Але для класу-нащадка TActiveForm це зробити неможливо, так як активна форма не є нащадком класу TActiveXControl. Для того щоб змінити методи IObjectSafety в активній формі, необхідно знову реалізувати зазначений інтерфейс. При цьому методи нового інтерфейсу «затінюють» старі і, отже, саме вони будуть викликатися клієнтами.
Спочатку слід додати інтерфейс IObjectSafety в список підтримуваних інтерфейсів TAFTest:
TAFTest = class (TActiveForm, IFilledBox, IObjectSafety)
Далі в секції private визначимо два методу - GetInterfaceSafetyOptions і SetInterfaceSafetyOptions c директивою виклику stdcall, а в секції implementation створимо реалізацію цих методів:
Результат тестування цього додатка відрізняється від попереднього (рис. 7).
Ми бачимо, що Internet Explorer попереджає користувача про можливу небезпеку вмісту. При значенні рівня безпеки Middle цей елемент управління буде запущений автоматично, але ініціалізація його даних не буде виконана, так само як не будуть виконуватися і скрипти. Той же ефект досягається і при натисканні кнопки No в діалозі, який надає Microsoft Internet Explorer (див. Рис. 7).
Динамічна ініціалізація елементів управління ActiveX в додатку
Добре відомо, що компоненти VCL можна створювати динамічно, під час виконання програми. Наприклад, якщо в обробнику події, пов'язаного з натисканням на кнопку, виконати код:
У Delphi з елементами управління ActiveX і працюють таким чином: спочатку викликається команда меню Component | Import ActiveX control, обраний ActiveX поміщається на палітру компонентів, потім він поміщається на форму, а в інспекторові об'єктів змінюються властивості і створюються обробники подій. Виникає питання: а як можна форматувати елемент управління ActiveX під час виконання програми - тобто, не реєструючи ActiveX на палітрі компонентів, під час виконання додатка створити його робочий екземпляр?
Зі сказаного раніше ясно, що, крім ініціалізації і створення робочого примірника елемента управління ActiveX, для роботи програми потрібно створити VCL-контейнер, куди він буде міститися. Роль такого контейнера в Delphi виконує клас TOleControl, який оголошений в модулі OleCtrls.pas. Базовий метод цього класу - InitControlData. У зазначеному методі необхідно визначити GUID фабрики класів елемента управління ActiveX, число обробників подій і посилання реалізованого на клієнті інтерфейсу обробників подій, а також посилання на ліцензійний інтерфейс, необхідний для викликів методів IClassFactory2. Метод InitControlData викликається автоматично після відпрацювання конструктора TOleControl.
Створимо новий додаток і в секції Interface оголосимо новий клас-нащадок TOleControl:
Методи InitControlData і EbeggAX реалізуємо такий спосіб:
Помістимо на форму кнопку і створимо простий обробник події:
Тепер можна запустити створене додаток і під час виконання натиснути кнопку. Елемент керування ActiveX з'явиться в зазначеній галузі. Змінивши GUID фабрики класів на, можна побачити інший результат (рис. 8).
Як перший, так і другий з тестованих тут елементів управління не були зареєстровані в палітрі компонентів Delphi. В принципі, таким же чином можна звернутися до будь-якого з зареєстрованих в системному реєстрі COM-серверів, що мають ключ реєстру Control в секції з GUID фабрики класів. Наявність цієї секції гарантує підтримку COM-сервер інтерфейсів IOleClientSite, IOleControlSite, IOleInplaceSite, необхідних для відображення елемента управління ActiveX на клієнті.
Зовсім недавно компанія Cougar представила нову серію блоків живлення для традиційних ПК - VTX, орієнтовану на користувачів з обмеженим бюджетом. У цьому огляді буде розглянута модель Cougar VTX600, яка завдяки своїм характеристикам буде однією з найбільш затребуваних в цій лінійці блоків живлення
На щорічному заході Capsaicin SIGGRAPH в Лос-Анджелесі компанія AMD зміцнила свої позиції на ринку ПК класу high-end з новими процесорами Ryzen Threadripper і GPU «Vega»
Для простого і зручного побудови мереж рядовими користувачами компанія ZyXEL випустила чергову версію свого Інтернет-центру для підключення до мереж 3G / 4G через USB-модем з точкою доступу Wi-Fi - ZyXEL Keenetic 4G III, який ми і розглянемо в цьому огляді
До своєї і так великій родині роутерів і маршрутизаторів фірма ASUS недавно додала дві вельми цікаві моделі: флагманську 4G-AC55U і більш просту 4G-N12. У даній статті буде розглянута флагманська модель ASUS 4G-AC55U
Молода, але амбіційна компанія KREZ на початку цього року випустила нову, оригінальну модель ноутбука KREZ Ninja (модель TM1102B32) під керуванням Windows 10. Оскільки цей комп'ютер має поворотний екран, він може служити універсальним рішенням - його можна з успіхом використовувати і для роботи, і для навчання, і для ігор
Якщо ви часто друкуєте фотографії та вже втомилися міняти картриджі в своєму принтері, зверніть увагу на МФУ Epson L850. Великий ресурс витратних матеріалів, чудова якість відбитків, найширший набір функціональних можливостей - ось лише деякі з переваг даної моделі