Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подмена Application динамической библиотеки


МистерТ ©   (2008-07-11 09:50:00) 

Здравствуйте!
Есть ситуация, приложение и библиотека (.dll), оба созданы в делфи и оба содержат формы. Использоваться будут только в рамках друг друга, перевод на другие языки не требуется.
Как известно экземпляры Application у них разные, в результате окно создаваемое в библиотеке не наследует иконку приложения и вообще, отображается отдельно на панели задач, а хотелось бы и иконку и "стандартное" для форм поведение, т.е. что бы на панели отображалась только главная форма (WinAPI привлекать не хотелось бы, только стандартными средствами VCL).
Для этого при инициализации приложения передаю в библиотеку указатель на Application приложения, а вот дальше такая петрушка:
Вариант 1:
LibForm := TLibForm.Create(MainApp);
MainApp - Application приложения.
Ситуация не меняется. Окно без нужной иконки и появляется на панели задач.
Вариант 2:
// при инициализации
LibApp := Application; //
Application := MainApp; //
...
LibForm := TLibForm.Create(Application); //
LibForm.ShowModal;
FreeAndNil(LibForm);
Application := LibApp;

Окно с нужной иконкой, на панели задач не появляется, но приложение падает при выгрузке библиотеки.
Вариант 3:
// при инициализации
pLibApp := @Application; //
Application := pMainApp^; //
...
LibForm := TLibForm.Create(Application); //
LibForm.ShowModal;
FreeAndNil(LibForm);
Application := pLibApp^;

Окно с нужной иконкой, на панели задач не появляется, не падает, но при выгрузке библиотеки главная форма изчезает, процесс "висит" в диспетчере задач.

Господа, как правильно создать форму из библиотеки (.dll) "привязанной" к Application приложения ?

Заранее благодарю всех за ответы.

З.Ы. .bpl не предлагать.


sniknik   (2008-07-11 16:21:00) [1]

> Использоваться будут только в рамках друг друга
убери dll, она не нужна, никаких выгод только проблемы.


tesseract   (2008-07-11 15:04:00) [2]


> Как известно экземпляры Application у них разные,


У них всё разное, Delphi отлично поддерживает COM - почему бы его не использовать, а не городить ерунды?


МистерТ   (2008-07-11 10:58:00) [3]

> Плохиш ©   (11.07.08 10:17) [3]
С хендлом делал, в результате иконка все равно дефолтовая. Поэтому и пытался "подменить" объекты Application.


Плохиш   (2008-07-11 10:17:00) [4]


> МистерТ   (11.07.08 09:50)  

http://www.ehow.com/how_2109379_use-forms-dll.html


Сергей М.   (2008-07-11 10:12:00) [5]


> запутался в конец уже


А проблема-то надуман - просто возьми да собери оба проекта с опцией использования рантайм-пакетов, тогда и никаких прыжков с бубном вокруг общности  Application, Screen и прочих глоб.переменных уровня VCL yt gjnht,etncz)


МистерТ   (2008-07-11 09:52:00) [6]

Что вариант 3 - дурость, знаю.
Но блин запутался в конец уже...


Наверх

Титульная страница Поиск, карта сайта Написать письмо