Grigoriy |
Отправлено: 12.09.2006, 18:14 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Описываю проблему.
Из одной функции (F1) модуля основной формы вызывается метод Show для отображения другого окна. Назовем это окно Form2.
После вызова Show вызывающая функция должна продолжать работу сразу после отображения окна Form2. Form2 должно быть всегда поверх остальных окон программы.
На Form2 имеется кнопка, при нажатии на которую должен выполняться выход из цикла в функции F1. Причем никакие другие сообщения не должны обрабатываться программой во время отображения Form2.
Чтобы событие нажатия на кнопку в окне Form2 было обработано во время выполнения F1, я решил в цикле этой функции вызывать метод
Application->ProcessMessages()
и действительно срабатывает.
Но тогда главное окно программы тоже начинает обрабатывать свои сообщения, а этого нужно избежать, поскольку будет глючить.
Известно, что метод ShowModal используется, когда главное окно не должно обрабатывать никакие сообщения, пока модальное окно не будет закрыто, но ShowModal не подходит в моем случае, поскольку этот метод будет выполнен только тогда, когда модальное окно будет закрыто. А мне, значит, нужно чтобы вызывающая функция F1 изменяла прогрессбар в Form2.
Отредактировано Grigoriy — 12.09.2006, 18:18
|
|
AVC |
Отправлено: 12.09.2006, 18:29 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Application->OnMessage = AppMessage;
void __fastcall TF_Main::AppMessage (tagMSG &msg, bool &handled)
или WndProc |
|
Grigoriy |
Отправлено: 12.09.2006, 20:36 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Наверно, лучше отдельный поток команд создать.
|
|
olegenty |
Отправлено: 13.09.2006, 06:57 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
вспоминаем про объекты ядрышка, функции типа WaitForSingleObject, etc...
(у меня программистка 40слишним лет, не зная, что есть ShowModal, реализовала это через объекты ядра)
|
|
GoodWin |
Отправлено: 13.09.2006, 14:32 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 50
|
Попробуй у основной формы сделать Enabled = false.
А никто не знает как получить доступ ко всем формам приложения? В частности мне надо им всем сделать Enabled = false. |
|
AVC |
Отправлено: 13.09.2006, 14:43 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (GoodWin @ 13.09.2006, 13:32) | А никто не знает как получить доступ ко всем формам приложения? |
CODE |
TForm *frm;
for (int i = 0; i < Screen->FormCount; i++)
if ((frm = Screen->Forms[i]) != this)
{ try { frm->Close(); }
catch(...) {;}
}
| |
|
GoodWin |
Отправлено: 14.09.2006, 10:35 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 50
|
Спасибо ). Помню что где то там, но искал в Application ))) |
|