![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить событие нажатия Ctrl+Alt+<буква>? [D7, WinXP]
DeVid © (2005-08-02 15:51:00)Вопрос состоит в следующем.
На форме имеется некий контрол - VirtualStringTree - сродни обычному TreeView. Необходимо, чтобы при нажатии комбинации Ctrl+Alt+<буква> срабатывало какое-либо событие.
Необходимо заметить, в чём собственно главная проблема. Ясно, что можно такую комбинацию легко перехватить при наступлении события OnKeyDown, в которую передаются параметры Key:Word и Shift:TShiftState. Достаточно сделать проверку:
if (Shift = [ssAlt, ssCtrl]) then
begin
...
после чего можно браться за скан код клавиатуры, содержащийся в переменной Key.
Но вот проблема: в переменной Key сканкод - виртуальный. А это значит, что какая бы раскладка клавиатуры ни была, нам всегда будут приходить английские буквы в верхнем регистре.
Вопрос:каким образом можно отловить реальный сканкод нажатой буквы именно той раскладки и регистра клавиатуры, в котором она находится?
DeVid (2005-08-04 13:42:00) [1]ОК, даже если я узнал раскладку клавиатуры, ShiftStat'ы, CapsLockState, как мне потом переводить виртуальное код клавиши в код "нажатой буквы"? Таблицы символов для разных раскладок строить? Опять-же, есть подозрение, что подобную функцию можно переложить на ОС.
Может есть какая-нибудь функция, которая переводит виртуальный код клавиши в скан код учитывая текущую раскладку и все ShiftStat'ы или аналогичная ей?
Гуру, подскажите пожалуйста!
deamon_t (2005-08-02 20:33:00) [2]Ну, можно узнать раскладку клавиатуры GetKeyboardLayout
TUser (2005-08-02 20:28:00) [3]TActionManager ??
DeVid (2005-08-02 19:39:00) [4]To Аст:
На сколько я понимаю, этот компонент просто позволяет юзеру грамотно ввестикомбинацию клавиш с тем, чтобы потом её, например, сохранить и использовать для отлова, как это, например, сделано в запуске приложений в Windows (такую комбинацию мы можем определить в ярлыке).
To Mx:
Вариант с OnKeyPress уже пробовал - при нажатии любой комбинации, типа Ctrl+Alt+<буква> это событие вообще не срабатывает - только OnKeyUp/OnKeyDown. :-(
Mx (2005-08-02 16:26:00) [5]А если использовать OnKeyPress? Состояние запоминать в OnKeyDown, в OnKeyUp - сбрасывать. А еще есть GetKeyState.
Аст (2005-08-02 16:05:00) [6]Попробуй THotKey с вкладки Win32 (uses comctrls)
Вроде бы никаких проблем