Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
14-1093711464
Torry Real 1444
2004-08-28 20:44
2004.09.19
Нужен человек на саппорт...


14-1093746177
Думкин
2004-08-29 06:22
2004.09.19
С днем рождения! 29 августа


1-1094202727
Kernel
2004-09-03 13:12
2004.09.19
WebBrowser через прокси


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


14-1093833942
Vitalik
2004-08-30 06:45
2004.09.19
Книга по COM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский