Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
1-1094285320
HF-Trade
2004-09-04 12:08
2004.09.19
TBitBtn


9-1085540573
Papai
2004-05-26 07:02
2004.09.19
SOS SOS SOS


3-1092988702
Janbolat
2004-08-20 11:58
2004.09.19
Скиньте линки про запросы, query если можно с чем их едят


3-1092652929
Jupiter74
2004-08-16 14:42
2004.09.19
Индексы Paradox


14-1093666950
menart
2004-08-28 08:22
2004.09.19
3-й номер RSDN-MAGAZINE




   Наверх