![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Application Messages [D7, WinXP]
dmk © (2004-09-04 17:59:00)Имеется 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;
dmk (2004-09-04 18:38:00) [1]В данных процессах идет постоянный вызов Application.ProcessMessages;
Вряд ли они мешают. Кроме того я выносил в отдельный поток.
Все тоже самое.
Defunct (2004-09-04 18:10:00) [2]> некоторые процессыв Child'ах занимают длительное процессорное время.
эти "некоторые процессы" желательно вынести в отдельные потоки, чтобы они не мешали циклу выборки сообщений.