C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Еще один режим использования окна, необходим...
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 )))

Вернуться в Вопросы программирования в C++Builder