![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить текущий регистр клавиатуры: русский или английский [D5, Win95/98, WinXP]
Владимир2 © (2002-04-23 14:21:00)Из программы.
Это нужно для того,чтобы в отклике "OnKeyDown" определить символ нажатой совместно с ALT или CTRL клавиши. Как сделать это напрямую никто и нигде мне подсказать не смог.
Надежда получить конкретный ответ на мой вопрос мала, но всё-же ...
Владимир2 (2002-04-23 21:33:00) [1]В том-то и дело, уважаемые коллеги, что OnKeyDown даёт один и тот же символ при разной раскладке, а OnKeyPress даёт правильный символ только, если нет Shift"а: если ALT, то в него совсем не попадаешь (это понятно), а если CTRL, то при любой раскладке будет одинаковый непонятный символ.
Поэтому вопрос не так прост, как казался вначале.
Спасибо всем.
Song (2002-04-23 21:06:00) [2]2Malder © (23.04.02 19:12), Владимир2 (23.04.02 18:35)
Для опредедения Shift"а, а также любых других клавиш можно использовать в onKeyPress GetKeyboardState() или GetAsyncKeyState()
Malder (2002-04-23 19:12:00) [3]Cobalt, нет. В событии OnKeyDown передается виртуальый код нажатой клавиши - и он не различает кодировок.
Поэтому нужно использовать OnKeyPress, но тоже проблема. В это событие не передается параметр Shift. То есть, не определишь нажат Alt, Ctrl или нет...
Malder (2002-04-23 19:11:00) [4]Cobalt, нет. В событии OnKeyDown передается виртуальый код нажатой клавиши - и он не различает кодировок.
Поэтому нужно использовать OnKeyPress, но тоже проблема. В это событие не передается параметр Shift. То есть, не определишь нажат Alt, Ctrl иил нет...
Malder (2002-04-23 18:57:00) [5]Используй событие OnKeyPress. Там передается var Key: Charто есть именно символ Char. Если раскладка русская, то при нажатии на "i" Keyбудет равен "ш"
Cobalt (2002-04-23 18:54:00) [6]А там (в OnKeyDown) кажется есть такой параметр sShiftState - там хранятся состояния Ctrl, Alt и Shift. А в Key - сам символ.
Владимир2 (2002-04-23 18:35:00) [7]Большое спасибо Song и PaRL за отклик. Ответ на этот мой вопрос я получил.
А есть ли более простой способ в "OnKeyDown" определить символ нажатой совместно с ALT или CTRL клавиши? Т.е. мне нужно в символьную переменную получить символ "U" или "Г", в зависимости от раскладки, если нажаты клавиши (ALT или CTRL)+(U).
Спасибо.
PaRL (2002-04-23 14:51:00) [8]
> Надежда получить конкретный ответ на мой вопрос мала, но
> всё-же ...
Вы хоть FAQ иногда смотрите?
Song (2002-04-23 14:50:00) [9]GetKeyboardLayout()
GetKeyboardLayoutName()