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

Вниз

Как сделать ShowModal, не замораживая остальное приложение?   Найти похожие ветки 

 
PB   (2004-11-17 14:50) [0]

Есть хост-приложение и DLL. Хост вызывает функцию в DLL, которая создаёт окно, показывае его по ShowModal, а затем ждёт результата. Результат возвращается хост-программе.
Проблема в том, что DLL это один из модулей, и работа хост-программы при вызове DLL не должна приостанавливаться, поэтому я сейчас временно сделал так:

Frm.Show;
while Frm.Visible do Application.ProcessMessages;

Такой вариант работает как надо, но съедает всё свободное время процессора.

Мне видятся следующие варианты:
1. Разделить в DLL функции создания окна и его уничтожения. Пусть функция создания окна работает с Frm.Show и сразу возвращает управление хост-программе, а результат возвращается хост-программе через функцию обратного вызова. Для меня это достаточно сложный вариант.
2. Воспользоваться TThread. Неясно, где его размещать - то ли в DLL, то ли в хост-программе.

Ваши варианты?


 
Reindeer Moss Eater ©   (2004-11-17 14:53) [1]

Вызвать ShowModal в обработчике пользовательского сообщения какой-нибудь формы/окна

Сообщение слать с помощью PostMessage


 
PB   (2004-11-17 14:59) [2]

Reindeer Moss Eater, можно пример?


 
Reindeer Moss Eater ©   (2004-11-17 15:23) [3]

Пример чего?

ШоуМодала?
Посылки сообщения?
Обработчика сообщения?


 
Erik1 ©   (2004-11-17 16:30) [4]

Я кажется понял, что тебе надо. При закрытии форма может сама освободить свои ресурсы.
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;



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

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

Наверх




Память: 0.47 MB
Время: 0.025 c
1-1101197302
denis24
2004-11-23 11:08
2004.12.05
for i:=0 to ScrollBox1.ControlCount-1


3-1099672832
Danila
2004-11-05 19:40
2004.12.05
Счётчик в Interbase - как?


14-1099590686
ИМХО
2004-11-04 20:51
2004.12.05
Сегодня 2 тур КУБКА УЕФА


1-1100758913
masha
2004-11-18 09:21
2004.12.05
OracleScript как вывести выполнение скрипта


1-1100662103
Shyrik
2004-11-17 06:28
2004.12.05
помогите