Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Вниз

Как сделать 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.039 c
3-1099832621
DeepProg
2004-11-07 16:03
2004.12.05
Отобразить Memo поле в DBGrid - вариация на тему


1-1100808505
xkiller
2004-11-18 23:08
2004.12.05
Как программно свернуть popupmenu?


4-1098448993
antonioxxx
2004-10-22 16:43
2004.12.05
Доступ к (драйверу) мыши


1-1100977821
Antonmm2
2004-11-20 22:10
2004.12.05
Asm


3-1099902981
UVV
2004-11-08 11:36
2004.12.05
ORA-12514





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский