Модальні форми в dll стор

У DLL можна не тільки виконувати обчислення, але й показувати форми, наприклад діалогові вікна. Для цього слід відкрити проект реалізації DLL, створити модуль з формою і помістити на неї необхідні елементи управління '

разом з обработчиками подій. Далі слід створити експортовану функцію, яка виведе діалогове вікно:

Даний код виклику діалогового вікна слід застосовувати тільки при статичної завантаженні DLL. При реалізації діалогового вікна в DLL слід враховувати, що на відміну від додатків форми в DLL не можуть створюватися одночасно з запуском DLL (в разі додатків для цього достатньо установки прапорця Auto-Create Form на вкладці Forms діалогового вікна, що відкривається командою Project ► Options). Тому форму необхідно створювати динамічно, викликаючи її конструктор Create з коду. Відповідно, перед виходом з процедури, що викликає форму, необхідно викликати її деструкція (в даному прикладі - FDialog.Release). Далі, слід враховувати, що в DLL створюється об'єкт типу TApplication. Оскільки сам додаток теж має даний об'єкт, то, якщо не вживати ніяких заходів, на екрані в панелі завдань з'являються дві кнопки -

одна для програми та інша для DLL, що створює діалогове вікно. Це ілюструє рис. 7.2.

Модальні форми в dll стор

Мал. 7.2. Поява двох кнопок на панелі завдань при виклику діалогового вікна з DLL

При натисканні мишею на кнопці додатка воно активується, головна форма з'являється на екрані, але доступ до елементів управління головної форми отримати не можна. Очевидно, така поведінка є некоректним. Тому в якості параметра функції в бібліотеці, що створює діалогове вікно, необхідно використовувати посилання на об'єкт TApplication додатки (точніше, на його властивість Handle). За допомогою наступного присвоєння в DLL знищується об'єкт TAppl i cati on, і додаток починає підтримувати розсилку повідомлень операційної системи елементів управління, створеним в DLL:

При цьому на панелі завдань залишається одна кнопка додатки, що цілком коректно. Типовий приклад коду основного додатки, що викликає діалогове вікно з DLL, наведено нижче:

Delphi і технологія COM

Схожі статті