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

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

Немодальные окна в dll [D6]


EternalWonderer ©   (2002-11-24 08:56:00) 

Уважаемые господа!
Проблема: при закрытии первой созданной формы в dll вместе с ней закрывается и приложение, как будто это главная форма приложения.

Остальные созданные формы можно открывать - закрывать сколько влезет, но не первую. В остальном приложение ведёт себя корректно - например, сворачивает все окна, включая созданные из dll, при щелчке мышью на значке программы в панели задач.

Сразу поле загрузки dll, как и написано в Help"e, передаю ей Handle главного приложения (точней, в Help"е написано передавать Handle главной формы приложения, но это не совсем корректно работает, а на описываемую ситуацию никак не влияет):
@SetHandle := GetProcAddress(LibMainForms, "SetHandle");
SetHandle(Application.Handle);

Вот код из dll:
Procedure SetHandle(MainAppHandle: THandle); Export;
Begin
Application.Handle := MainAppHandle;
End;


Вопрос: как заставить dll считать главным окном "настоящее" главное окно из EXE, а не первую созданную в dll форму?


Александр Б.   (2002-11-25 11:16:00) [1]

Ну и еще комент
если откомпилить EXE и DLL и исрользованием
vcl50.bpl
то все проблеммы рашаться сами по себе. Это произойдет по тому что tapplication находится внутри forms.pas а он внутри Vcl50.bpl. То есть и для exe и для dll он буде одним и тем же. Ну и это позволит немного места сэкономить.


Falcon_K   (2002-11-25 07:00:00) [2]

2MeGaBrAiN
А как насчет меню. Или у тебя их нет?


MeGaBrAiN   (2002-11-25 06:21:00) [3]

По поводу поведения MDI окон из dll.. если помимо Application передавать еще и Tscreen то всякие там Ctrl-TAB работаю нормально.. и еще нюанс при разрушении MDI окна нужно в Destoy методе делять явное присвоение экземпляра формы к Nil.. как только я это сделал сразу кол-во глюков сократилось.. однако сокращение не есть избавление, пришлось понаставить кучу try exception и тогда все загрузки в выгрузки проходять без излишних криков


Falcon_K   (2002-11-25 02:50:00) [4]

Приветствую!
Я сталкнулся с этой проблемой чуть раньше. Где-то на месяц.
Прочитал достаточно статей и пр. литературы.
Присваивать Application - верное решение.
Вопрос другой - если вызывать из dll Child-окно, то такая веселуха наступает. На легкои примере - все работает корректно
(вроде). Но попробуй добавить в Child окно менюшку. Вот тогда
наступают глюки.
Ссылочка:
http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=16105


EternalWonderer   (2002-11-24 18:10:00) [5]

Действительно, присвоение в dll не Handle, а Applicationиз exe решило проблему. Интересно только, почему в справке Delphi приведено первое, не совсем корректное решение? Правда, неизвестно, является ли второе решение полностью корректным - время покажет ...


Александр Спелицин   (2002-11-24 16:17:00) [6]

У Вас 2 экземплята Application: в Exe и в Dll. Вот статья по Вашей теме:
http://www.delphikingdom.com/helloworld/md_dll.htm


EternalWonderer   (2002-11-24 15:17:00) [7]

И как же она поможет, если не секрет? Если имеется в виду поиск главного окна при загрузке dll, то я могу и просто ей передать Handle без всякого FindWindow.


CbIH   (2002-11-24 14:43:00) [8]

Тут поможет функция FindWindow.


Наверх

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