Узнай символ нажатой клавиши - PullRequest
7 голосов
/ 14 апреля 2009

Если я добавлю слушателя в KeyboardEvent.KEY_DOWN, я смогу узнать keyCode и charCode.

Код клавиши соответствует другому символу в зависимости от клавиатуры.

CharCode так же бесполезен, согласно справке:

Значения кодов символов являются английскими значениями клавиатуры. Например, если вы нажмете Shift + 3, charCode будет # на японской клавиатуре, как и на английской клавиатуре.

Итак, как я могу узнать, какого персонажа нажал пользователь?

Ответы [ 4 ]

2 голосов
/ 14 апреля 2009

Вы пропустили довольно важную часть цитаты или ее там не было:

Например, если вы нажмете Shift + 3, Метод getASCIICode () возвращает # в Японская клавиатура, как и на английская клавиатура.

http://livedocs.adobe.com/flex/201/langref/flash/events/KeyboardEvent.html

Это, вероятно, более полезно:

Свойство charCode представляет собой числовое значение этого ключа в текущем наборе символов (набор символов по умолчанию - UTF-8, который поддерживает ASCII).

http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000480.html

Ваше приложение определяет, какой набор символов используется, и это означает, что даже если вам придется использовать отдельные клавиши разных локальных клавиатур для создания одного и того же символа, оно будет иметь одинаковый код charCode.

1 голос
/ 23 июля 2012

Вы не можете эффективно использовать charCode или keyCode для определения введенного символа. Вы должны сравнивать только строки. KeyboardEvent не дает вам введенного текста, что также глупо.

В моем случае я реализовал событие KeyboardEvent.KEY_DOWN в дополнение к событию TextEvent.TEXT_INPUT. В обработчике для последнего я реализовал всю функциональность, где был необходим charCode и не менялся в зависимости от локали клавиатуры (например, пробел или ввод). В первом я проверил свойство текста события, чтобы сравнить то, что мне нужно, независимо от локали.

Забыл упомянуть, что этот пост подсказал мне это решение: Как узнать, какая клавиша нажата на языке?

1 голос
/ 15 апреля 2009

ПРИМЕЧАНИЕ: (Это касается сообщений клавиатуры в целом и не относится только к ActionScript. Я неправильно прочитал вопрос и предоставил более глубокий ответ, тогда это было полезно)

Действительно, путь от клавиатуры до Windows Char очень ОЧЕНЬ сложен, он выглядит примерно так:

  • Клавиатура отправляет скан-код в драйвер устройства клавиатуры (KDD).
  • KDD отправляет сообщение в очередь системных сообщений.
  • Затем система отправляет сообщение потоку переднего плана, который создал окно с текущим фокусом клавиатуры.
  • Цикл сообщений цепочки принимает сообщение и определяет правильный перевод символов.

«Настоящий» типографский символ, который был напечатан, не рассчитывается до тех пор, пока не завершит весь этот процесс, поскольку каждое окно и поток могут находиться в разных языковых стандартах, и вы не сможете «перевести» ключ без знания локали и буфера ключей. история.

Сообщения "WM_KEYDOWN" и "WM_KEYUP" нельзя просто преобразовать с помощью MapVirtualKey или чего-то еще, потому что вы не знаете, сколько нажатий клавиш составляют один символ. Простой метод - просто обработать событие WM_CHAR и использовать его. Учтите следующее:

  • en-US locale, вы нажимаете следующие клавиши a + '+ a, вы получаете следующий вывод "a'a"
  • pt-BZ locale, вы нажимаете следующие клавиши a + '+ a, вы получаете следующий вывод "aá"

Таким образом, в обоих примерах вы получите 3 сообщения KEYDOWN, KEYUP, но в первом вы получите 3 WM_CHAR, а во втором - только 2.

Следующая статья действительно хороша для основных понятий: http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx

0 голосов
/ 14 апреля 2009

Для ввода японских символов хирагана и т. Д. Часто требуется несколько нажатий клавиш, а иногда даже выбор соответствующего символа из выпадающего меню. Возможно, вы хотите прослушать другое событие, например, событие изменения текстового поля.

...