![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка клавиш на форме [D5, Win95/98, Win2k, WinXP]
Переяслов Григорий © (2002-12-20 10:54:00)Уважаемые мастера! Проблема вот в чем. Я для некоторой формы определяю обработчики событий onKeyPress и onKeyDown. Потом присваиваю эти обработчики всем контролам, получающим фокус ввода, на форме:
. . .
btnPrint.OnKeyDown := FormKeyDown;
btnCancel.OnKeyDown := FormKeyDown;
btnPrint.OnKeyPress := FormKeyPress;
btnCancel.OnKeyPress := FormKeyPress;
. . .
Но есть некоторые контролы, получающие фокус ввода, но не имеющие событий onKeyDown и onKeyPress, например TTabControl. Как обойти эту ситуацию? Или ее необходимо решать по другому?
Переяслов Григорий (2002-12-20 11:46:00) [1]> Delirium^.Tremens Важно там, где форма - владелец. Для форм есть свойство DefaultMonitor, оно должно быть dmMainForm, хотя по умолчанию dmActiveForm. Но это для форм, а для MessageBox непонятно.
А по настоящему вопросу проблему снимает установка свойства формы KeyPreview в True. ;-)
Delirium^.Tremens (2002-12-20 11:29:00) [2]А MB_SYSTEMMODAL или типа того? Важно на каком из мониторов оно будет показано, где активная форма или где форма-владелец?
Переяслов Григорий (2002-12-20 11:25:00) [3]> Delirium^.Tremens. SetFocus проблему решил, а вот с использованием MessageBox(...., MB_DEFAULT_DESKTOP_ONLY)сообщение вообще не появлялось. Я использую именно Application.MessageBox именно из за того, что оно принадлежит моему приложению и, когда оно на экране, нельзя выполнять какие -либо действия, предварительно не закрыв MessageBox.
Delirium^.Tremens (2002-12-20 11:18:00) [4]2 Переяслов Григорий ©>
Как насчет твоего вопроса?
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1040131334&n=0
LongIsland (2002-12-20 11:07:00) [5]TabControl - наследник TWinControl. Значит, по идее для него должны быть определены сообщения WM_KEYDOWN и WM_KEYUP. А что если попробовать их ловить?
Переяслов Григорий (2002-12-20 11:06:00) [6]> Song
Когда фокус находится на таком контроле, он перехватывает клавиатуру и сообщение не доходти до TForm.onKeyPress, которое у меня описано
Song (2002-12-20 11:01:00) [7]Может в этом случае легче TForm.onKeyPress или TApplication.onMessage
myor (2002-12-20 11:00:00) [8]по-другому, ведь такого события для них нет.