View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001951 | Far Manager | Dialog | public | 2011-12-21 14:46 | 2011-12-24 16:20 |
Reporter | Aidar | Assigned To | vskirdin | ||
Priority | normal | Severity | major | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | x86 | OS | Windows | OS Version | XP SP2 |
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001951: Неправильный InputRecord в событии DN_CONTROLINPUT | ||||
Description | 1. В обработчике DN_CONTROLINPUT при нажатии буквы кириллицы (без Shift и с ним) приходит InputRecord, в котором VirtualKeyCode, VirtualScanCode и ControlKeyState заполнены нулями, а не правильными значениями для соответствующей клавиши. Пример, для буквы 'ф' должно быть как для 'a': VirtualKeyCode=65, VirtualScanCode=30, ControlKeyState=0, а для 'Ф' = Shift+'ф' - как для 'A' = 'Shift+a': VirtualKeyCode=65, VirtualScanCode=30, ControlKeyState=16. 2. При нажатии латинской буквы в ControlKeyState не устанавливается модификатор Shift. Пример: 'A' = 'Shift+a': ControlKeyState=0 вместо 16. | ||||
Steps To Reproduce | В диалоге вывести на экран содержимое InputRecord. | ||||
Tags | No tags attached. | ||||
Build | 2318 | ||||
|
В dialog.cpp FarKey преобразуется в InputRecord с помощью функции KeyToInputRecord (из keyboard.cpp), которая вызывает TranslateKeyToVK. В этой функции я не нашёл преобразования клавиши с буквой кириллицы в соответствующую VK, |
|
А зачем тебе VK и SC, если есть UnicodeChar? |
|
Чтобы знать, какую клавишу на самом деле нажали независимо от раскладки. Пример: Я использую DI_USERCONTROL для создания своего меню. В нём пункты выбираются по горячим символам - латинским буквам. Если нажата буква в другой раскладке, нужно определять реальную клавишу, по которой можно определить латинскую букву. Т.е. пункт "&F - Файл" должен срабатывать на лат. "f", рус. "а" и другие буквы в других раскладах, если они приходятся на клавишу-букву "f". Т.е. получить то же, что реализовано в пользовательском меню. |
|
Дополнение: из-за неправильного InputRecord функция InputRecordToName возвращает неправильное название клавиши (для обоих случаев). Поправка: Это я ошибся, забыл, что InputRecordToName возвращает не имя VK, а имя FarKey. |
|
build 2317 |
|
Без модификаторов и с модификатором Shift - нормально. Проблема только с другими модификаторами: При Ctrl+A получается CtrlShift+A, т.е. учёт Shift нужен только при отсутствии других модификаторов. |
|
build 2318 |
|
Всё нормально. Спасибо. |
|
ну тогда выставь соответствующий статус... ("отработан") |
|
Отработан |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-12-21 14:46 | Aidar | New Issue | |
2011-12-21 15:00 | Aidar | Note Added: 0008176 | |
2011-12-21 20:58 | Maximus | Note Added: 0008177 | |
2011-12-22 02:56 | Aidar | Note Added: 0008183 | |
2011-12-22 02:59 | Aidar | Note Edited: 0008183 | |
2011-12-24 07:12 | Aidar | Note Added: 0008227 | |
2011-12-24 11:35 | vskirdin | Note Added: 0008229 | |
2011-12-24 11:35 | vskirdin | Assigned To | => vskirdin |
2011-12-24 11:35 | vskirdin | Status | new => feedback |
2011-12-24 12:35 | Aidar | Note Added: 0008230 | |
2011-12-24 12:35 | Aidar | Status | feedback => assigned |
2011-12-24 12:36 | Aidar | Note Edited: 0008227 | |
2011-12-24 15:24 | vskirdin | Note Added: 0008231 | |
2011-12-24 15:24 | vskirdin | Status | assigned => feedback |
2011-12-24 15:55 | Aidar | Note Added: 0008235 | |
2011-12-24 15:55 | Aidar | Status | feedback => assigned |
2011-12-24 16:12 | vskirdin | Note Added: 0008236 | |
2011-12-24 16:13 | Aidar | Note Added: 0008237 | |
2011-12-24 16:13 | Aidar | Status | assigned => resolved |
2011-12-24 16:20 | vskirdin | Build | => 2318 |
2011-12-24 16:20 | vskirdin | Status | resolved => closed |
2011-12-24 16:20 | vskirdin | Resolution | open => fixed |
2011-12-24 16:20 | vskirdin | Fixed in Version | => 3.0 |