Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: CL | DM;

Вниз

Немодальные окна в dll   Найти похожие ветки 

 
EternalWonderer   (2002-11-24 08:56) [0]

Уважаемые господа!
Проблема: при закрытии первой созданной формы в 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 форму?


 
CbIH ©   (2002-11-24 14:43) [1]

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.12.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
4-14853
Vn
2002-10-18 11:31
2002.12.05
PostMessage в сервисах


3-14429
weak
2002-11-18 10:50
2002.12.05
В процессе выполнения программы происходит вычисление:


3-14463
Cranium
2002-11-19 06:52
2002.12.05
Альтернатива QReport ?


6-14723
Лана Розанова
2002-10-07 10:10
2002.12.05
HTML


3-14460
poops66
2002-11-19 00:06
2002.12.05
Path to ODBC user data source