Главная страница
    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.029 c
3-1099568728
СержК
2004-11-04 14:45
2004.12.05
Как проиндексировать набор данных


1-1101285570
Erik1
2004-11-24 11:39
2004.12.05
Перекрытие невиртуальный процедуры?


14-1100472710
Поручик
2004-11-15 01:51
2004.12.05
Для тех, кому слово X-COM о чем-то говорит.


14-1100765288
serg_s
2004-11-18 11:08
2004.12.05
рус. доку по Ms Project 2003


1-1100778694
snake1977
2004-11-18 14:51
2004.12.05
Параметры функций в DLL





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