Динамічна ініціалізація елементів управління activex стор

Добре відомо, що VCL-компоненти можна створювати динамічно, під час виконання програми. Наприклад, якщо в обробнику події, пов'язаного з клацанням на кнопці, виконати наступний код, то при натисканні на кнопці під час виконання додатка з'явиться однорядкове текстове нулі:

Якби компонент TEdit був відсутній на палітрі компонентів, то даний код також був би успішно виконаний - при динамічному створенні VCL-kom-понептов зовсім не обов'язково, щоб вони були присутні па палітрі компонентів.

Зазвичай в Delphi з елементами управління ActiveX працюють таким чином. Спочатку вибирається команда Component ► Import ActiveX control, обраний елемент ActiveX поміщається спочатку на палітру компонентів, потім - па форму і в інспекторові об'єктів змінюються властивості і створюються обробники подій. Виникає питання, як форматувати елемент ActiveX під час виконання програми? Вірніше, чи можна під час виконання додатка створити робочий екземпляр елемента ActiveX, якщо не реєструвати його на палітрі компонентів?

Зі сказаного раніше ясно, що крім ініціалізації і створення робочого примірника елемента управління ActiveX для роботи програми потрібно створити VCL-коптейпер, куди буде міститися елемент управління ActiveX. Роль такого контейнера в Delphi грає клас TOleControl, оголошений в модулі OleCtrls.pas. Базовий метод цього класу - InitControlData. У цьому методі необхідно визначити GUID фабрики класів елемента управління ActiveX, число обробників подій і посилання реалізованого в клієнті інтерфейсу обробників подій, а також посилання на ліцензійний інтерфейс, необхідний для викликів методів інтерфейсу IClassFactory2. Метод InitControlData викликається автоматично після відпрацювання конструктора TOleControl

Створимо новий додаток і в секції interface оголосимо новий клас - нащадок класу TOIeControl:

Реалізація методів InitControlData і EmbeddAX повинна виглядати наступним чином:

Помістимо на форму кнопку і створимо простий обробник події:

Тепер можна запустити створене додаток і під час його виконання клацнути на кнопці. Елемент керування ActiveX з'явиться в зазначеній галузі. Замініть ідентифікатор GUID фабрики класів наступним значенням:

Динамічна ініціалізація елементів управління activex стор

Мал. 2.24. Ініціалізація незареєстрованого елемента ActiveX під час виконання додатка

Як перший, так і другий з тестованих тут елементів управління не були зареєстровані в палітрі компонентів Delphi. В принципі, таким же чином можна звернутися до будь-якого з зареєстрованих в системному реєстрі СОМ-серверів, що мають ключ реєстру Control в секції з ідентифікатором GUID фабрики класів. Наявність цієї секції гарантує підтримку СОМ-сер-Вером інтерфейсів IOleClientSite, IOleControlSite, IOlelnplaceSite, які необхідні для відображення елемента управління ActiveX в клієнті.

Схожі статті