Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-14531
Pontic
2002-11-26 15:59
2002.12.05
Как прочитать метку диска


3-14384
Tundra
2002-11-19 16:07
2002.12.05
Можно ли определить высоту строки в DBGrid.


7-14848
Aric
2002-10-02 21:14
2002.12.05
Глобальный хук на мышку


3-14435
NeyroSpace
2002-11-18 10:57
2002.12.05
Как зайти в IBExpert НЕ под SYSDBA?


1-14515
vich
2002-11-23 21:26
2002.12.05
Как повернуть, к примеру TImage





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский