Главная страница
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.043 c
4-1091705285
анонимный
2004-08-05 15:28
2004.09.19
панель задач


9-1073679215
Stalker_23b
2004-01-09 23:13
2004.09.19
РЕАЛИСТИЧНАЯ Физика в игре.


1-1094221622
hamster
2004-09-03 18:27
2004.09.19
CRC32


14-1093346330
0d08h
2004-08-24 15:18
2004.09.19
Java Socket


1-1094278842
Соколов
2004-09-04 10:20
2004.09.19
TextFile