Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
ВнизНемодальные окна в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c