Главная страница
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.116 c
1-1094231514
Yr2
2004-09-03 21:11
2004.09.19
Как перетащить письмо из MS Outlook на свою форму?


9-1082294750
ork
2004-04-18 17:25
2004.09.19
rushvild


1-1094462023
tria
2004-09-06 13:13
2004.09.19
Class TListBox not found - в чем смысл этой ошибки?


3-1093190448
Flagman
2004-08-22 20:00
2004.09.19
Где найти описания EXCEPTION для ORACLE?


14-1093382240
Piter
2004-08-25 01:17
2004.09.19
УРА Есть новый мировой рекорд!