![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подмена 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 - дурость, знаю.
Но блин запутался в конец уже...