View Issue Details

IDProjectCategoryView StatusLast Update
0001951Far ManagerDialogpublic2011-12-24 20:20
ReporterAidarAssigned Tovskirdin 
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Platformx86OSWindowsOS VersionXP SP2
Product Version3.0 
Target VersionFixed in Version3.0 
Summary0001951: Неправильный InputRecord в событии DN_CONTROLINPUT
Description1. В обработчике 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.
TagsNo tags attached.
Build2318

Activities

Aidar

2011-12-21 19:00

reporter   bugnote:0008176

В dialog.cpp FarKey преобразуется в InputRecord с помощью функции KeyToInputRecord (из keyboard.cpp), которая вызывает TranslateKeyToVK.
В этой функции я не нашёл преобразования клавиши с буквой кириллицы в соответствующую VK,

Maximus

2011-12-22 00:58

reporter   bugnote:0008177

А зачем тебе VK и SC, если есть UnicodeChar?

Aidar

2011-12-22 06:56

reporter   bugnote:0008183

Last edited: 2011-12-22 06:59

View 2 revisions

Чтобы знать, какую клавишу на самом деле нажали независимо от раскладки.
Пример:
Я использую DI_USERCONTROL для создания своего меню. В нём пункты выбираются по горячим символам - латинским буквам. Если нажата буква в другой раскладке, нужно определять реальную клавишу, по которой можно определить латинскую букву.
Т.е. пункт "&F - Файл" должен срабатывать на лат. "f", рус. "а" и другие буквы в других раскладах, если они приходятся на клавишу-букву "f".
Т.е. получить то же, что реализовано в пользовательском меню.

Aidar

2011-12-24 11:12

reporter   bugnote:0008227

Last edited: 2011-12-24 16:36

View 2 revisions

Дополнение: из-за неправильного InputRecord функция InputRecordToName возвращает неправильное название клавиши (для обоих случаев).
Поправка: Это я ошибся, забыл, что InputRecordToName возвращает не имя VK, а имя FarKey.

vskirdin

2011-12-24 15:35

administrator   bugnote:0008229

build 2317

Aidar

2011-12-24 16:35

reporter   bugnote:0008230

Без модификаторов и с модификатором Shift - нормально.
Проблема только с другими модификаторами:
При Ctrl+A получается CtrlShift+A,
т.е. учёт Shift нужен только при отсутствии других модификаторов.

vskirdin

2011-12-24 19:24

administrator   bugnote:0008231

build 2318

Aidar

2011-12-24 19:55

reporter   bugnote:0008235

Всё нормально. Спасибо.

vskirdin

2011-12-24 20:12

administrator   bugnote:0008236

ну тогда выставь соответствующий статус... ("отработан")

Aidar

2011-12-24 20:13

reporter   bugnote:0008237

Отработан

Issue History

Date Modified Username Field Change
2011-12-21 18:46 Aidar New Issue
2011-12-21 19:00 Aidar Note Added: 0008176
2011-12-22 00:58 Maximus Note Added: 0008177
2011-12-22 06:56 Aidar Note Added: 0008183
2011-12-22 06:59 Aidar Note Edited: 0008183 View Revisions
2011-12-24 11:12 Aidar Note Added: 0008227
2011-12-24 15:35 vskirdin Note Added: 0008229
2011-12-24 15:35 vskirdin Assigned To => vskirdin
2011-12-24 15:35 vskirdin Status new => feedback
2011-12-24 16:35 Aidar Note Added: 0008230
2011-12-24 16:35 Aidar Status feedback => assigned
2011-12-24 16:36 Aidar Note Edited: 0008227 View Revisions
2011-12-24 19:24 vskirdin Note Added: 0008231
2011-12-24 19:24 vskirdin Status assigned => feedback
2011-12-24 19:55 Aidar Note Added: 0008235
2011-12-24 19:55 Aidar Status feedback => assigned
2011-12-24 20:12 vskirdin Note Added: 0008236
2011-12-24 20:13 Aidar Note Added: 0008237
2011-12-24 20:13 Aidar Status assigned => resolved
2011-12-24 20:20 vskirdin Build => 2318
2011-12-24 20:20 vskirdin Status resolved => closed
2011-12-24 20:20 vskirdin Resolution open => fixed
2011-12-24 20:20 vskirdin Fixed in Version => 3.0