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

Вниз

Application Messages   Найти похожие ветки 

 
dmk ©   (2004-09-04 17:59) [0]

Имеется MDIForm. В ней постепенно открываются Child"ы и
нужно сделать обработку нажатий клавиш по всему приложению.
В общем все работает, за исключением моментов, когда
некоторые процессы в Child"ах занимают длительное процессорное время. В этом случае обработка сообщения WM_KEYUP
не производится.
Подскажите как решить эту проблему.
Возможно я не вижу ошибки.

procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);

begin
 Handled := False;

 case Msg.message of
   WM_KEYUP: begin
               
               If not FCanPressOverKeys then
                 begin
                     case Msg.wParam of
                      VK_ESCAPE: Handled := True;
                         VK_TAB: Handled := True;
                       Ord("F"): Handled := True;
                       Ord("W"): Handled := True;
                       Ord("S"): Handled := True;
                     end;//case
                 end;//If not FCanPressOverKeys

               If Handled and (not FCanPressOverKeys) then
                 begin
                   FCanPressOverKeys := True;
                   PreviewForm.SetCaption("Can press key!");
                 end;
             end;//WM_KEYUP

   WM_KEYDOWN: begin
                 If FCanPressOverKeys then
                   begin
                   
                     case Msg.wParam of
                      VK_ESCAPE: begin
                                   EscPressed;
                                   Handled := True;
                                 end;
                         VK_TAB: begin
                                   SwitchPanels;
                                   Handled := True;
                                 end;
                       Ord("F"): begin
                                   If FFullScreenState then
                                     RemoveFullScreen else SetFullScreen;
                                   Handled := True;
                                 end;
                       Ord("W"): begin
                                   if CtrlKeyDown then Perform(WM_CLOSECHILD, 0, 0);
                                   Handled := True;
                                 end;
                       Ord("S"): begin
                                   if CtrlKeyDown then SaveButtonClick(Self);
                                   Handled := True;
                                 end;
                     end;//case

                     If Handled then
                       begin
                         FCanPressOverKeys := False;
                         PreviewForm.SetCaption("Other key""s not work!");
                       end;

                   end;//If FCanPressOverKey
               end;//WM_KEYDOWN
 end;//case.Msg
end;


 
Defunct ©   (2004-09-04 18:10) [1]

> некоторые процессы в Child"ах занимают длительное процессорное время.

эти "некоторые процессы" желательно вынести в отдельные потоки, чтобы они не мешали циклу выборки сообщений.


 
dmk ©   (2004-09-04 18:38) [2]

В данных процессах идет постоянный вызов Application.ProcessMessages;
Вряд ли они мешают. Кроме того я выносил в отдельный поток.
Все тоже самое.



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

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

Наверх




Память: 0.48 MB
Время: 0.053 c
14-1093525319
VMcL
2004-08-26 17:01
2004.09.19
Документирование кода (щас меня будут бить ногами :-)


1-1094479078
pavelgr
2004-09-06 17:57
2004.09.19
убрать выделение


1-1094029818
Denmin
2004-09-01 13:10
2004.09.19
Как отсечь пробелы спереди и сзади слова?


14-1094046510
lipskiy
2004-09-01 17:48
2004.09.19
Анекдот прикольный вспомнил


4-1091786469
Aldor_
2004-08-06 14:01
2004.09.19
HKEY_CURRENT_USER для всех юзеров