-
Собственно вопрос: в событии OnKeyDown можно произвести подмену char-кода нажатой клавиши? Как OnKeyDown получить char-код известно - через MapVirtualKey, а можно ли его подменить для события OnKeyPress. Поясню для чего это нужно: есть много полей ввода, в некоторых полях нужно вводить только по русски, в некоторых только по английски. И вот чтоб не приходилось переключать раскладку клавиатуры, допустим в поле, где нужно вводить только английские символы, нажали "д", а вывеkось "l".
-
> а можно ли его подменить для события OnKeyPress.
Можно
> Как OnKeyDown получить char-код известно - через MapVirtualKey,
А в OnKeyPress - сразу char, ничего подменять не требуется. Проверил, вот такой код вообще супер работает, осталось таблицу замен прошить - и всё
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = 'д' then Key := 'l'; if Key = 'w' then Key := 'ц'; end;
-
Такой вариант конечно понятен, но там все несколько сложнее, и для каждого отдельного поля прописывать в KeyPress что на что менять - явно не правильно. Нужно так - код 67 - в OnKeyPress должен быть код "C" в событии OnKeyPress.
-
Пойдет?
Caption := Chr(Key) + ' (' + IntToStr(Key) + ')'; И меняй, что хочешь на что хочешь. Хоть таблицу подстановки, хоть перекодировку и т.п.
-
У меня сейчас так примерно и сделано, но это не на 100% процентов то, что надо. Есть проблема с испанским, немецким языками и еще некоторые другие проблемы. Понятно , что сейчас они у меня решены через OnKeyPress, но это несколько громозко и приходится для каждой конкретной проблемы делать такого рода подмену. А вот если есть возможность делать подмену непосредственно в OnKeyDown, то это было бы универсальное решение. Перерыл кучу инфы в инете, но пока то что надо не нашел.
-
проще на событии входа в поле переключить раскладку на нужную, при выходе восстановить сохраненную как было... проще, очевиднее, нагляднее, чем "стоит испанский, а в поле вводит какую то абракадабру" (не установлен русский шрифт к примеру, а переводишь в него например а не в английский... ну планы поменялись...).
-
>А вот если есть возможность делать подмену непосредственно в OnKeyDown, >то это было бы универсальное решение. Дык о том и пишем. Key - это переменная. Она меняется. Создайте массив с нужной раскладкой и меняте на здоровье. Хоть в OnKeyDown, хоть в OnKeyUp.
-
> Хоть в OnKeyDown, хоть в OnKeyUp. там как бы код клавиши, один на клавишу, без разницы у большой буквы, маленькой, русской, английской... ну, если не обращать внимания на "модификаторы" шифт/капслок/локаль. в чем у него и "проблема" при изменении в OnKeyDown.
-
> Создайте массив с нужной раскладкой
это совершенно лишнее, и неверный путь вообще.
-
> AlexC
GetKeyboardLayoutList LoadKeyboardLayout и т.д.
-
> kilkennycat
Абсолютно правильно! Я так и поступаю. В OnEnter преверяем текущую ракладку, и меняем ее программно, предварительно запомнив, если надо. В OnExit можно восстановить запоменную.
|