![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать ShowModal, не замораживая остальное приложение? [D5]
PB © (2004-11-17 14:50:00)Есть хост-приложение и DLL. Хост вызывает функцию в DLL, которая создаёт окно, показывае его по ShowModal, а затем ждёт результата. Результат возвращается хост-программе.
Проблема в том, что DLL это один из модулей, и работа хост-программы при вызове DLL не должна приостанавливаться, поэтому я сейчас временно сделал так:
Frm.Show;
while Frm.Visible do Application.ProcessMessages;
Такой вариант работает как надо, но съедает всё свободное время процессора.
Мне видятся следующие варианты:
1. Разделить в DLL функции создания окна и его уничтожения. Пусть функция создания окна работает с Frm.Show и сразу возвращает управление хост-программе, а результат возвращается хост-программе через функцию обратного вызова. Для меня это достаточно сложный вариант.
2. Воспользоваться TThread. Неясно, где его размещать - то ли в DLL, то ли в хост-программе.
Ваши варианты?
Erik1 (2004-11-17 16:30:00) [1]Я кажется понял, что тебе надо. При закрытии форма может сама освободить свои ресурсы.
procedure .DoClose(var Action: CloseAction)
если указать Action := caFree;
А перед этим можно возвратить значение, например
PostMessage(Owner, WM_USER+1, Value, 0);
где Owner обязательно главная форма котороя обрабатывает WM_USER+1.
Value - значение которое ты передаеш.
Сообщение перехватываетя так:
procedure ShowReport(var Msg: TMessage); message wm_ShowReport;
wm_ShowReport = WM_USER+1;
Reindeer Moss Eater (2004-11-17 15:23:00) [2]Пример чего?
ШоуМодала?
Посылки сообщения?
Обработчика сообщения?
PB (2004-11-17 14:59:00) [3]Reindeer Moss Eater, можно пример?
Reindeer Moss Eater (2004-11-17 14:53:00) [4]Вызвать ShowModal в обработчике пользовательского сообщения какой-нибудь формы/окна
Сообщение слать с помощью PostMessage