找出字符按下的键
如果我将一个监听器添加到KeyboardEvent.KEY_DOWN,我可以找出keyCode和charCode。
keyCode根据键盘映射到不同的字符。
根据帮助,charCode是无用的:
字符代码值是英文键盘值。 例如,如果按Shift + 3,日语键盘上的charCode就是#,就像在英文键盘上一样。
那么,我怎样才能找出用户按下哪个字符?
您遗漏了报价中非常重要的一部分,或者您找不到它的位置:
例如,如果按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。
注意:(这是关于一般的键盘消息,不适用于单独的动作,我误解了这个问题,并提供了更深入的答案,然后是有帮助的)
真的,从键盘到windows char的路径非常复杂,它是这样的:
输入的'真实'字符在完成整个过程之前不会被计算出来,因为每个窗口和线程可以位于不同的语言环境中,并且在不知道语言环境和关键字缓冲区历史记录的情况下无法真正“翻译”该键。
“WM_KEYDOWN”和“WM_KEYUP”消息不能用MapVirtualKey或其他东西转换,因为你不知道有多少按键组成一个字符。 简单的方法就是处理'WM_CHAR'事件并使用它。 考虑以下:
所以在这两个例子中你都会得到3个KEYDOWN,KEYUP消息,但是在第一个例子中你得到3个WM_CHAR,而在第二个例子中你只能得到2个。
以下文章对于基本概念非常有用:http://msdn.microsoft.com/zh-cn/library/ms646267(VS.85).aspx
您无法有效地使用charCode
或keyCode
来确定输入的字符。 您只能比较字符串。 KeyboardEvent
不会给你输入的文字,这也是愚蠢的。
在我的情况下,除了TextEvent.TEXT_INPUT
事件之外,我还实现了一个KeyboardEvent.KEY_DOWN
事件。 在后者的处理程序中,我实现了需要charCode
所有功能,并且每个键盘区域设置(例如,空格键或输入)都不会发生变化。 在前者中,我检查了事件的文本属性,以比较我需要的区域独立。
忘了提及这个帖子暗示了我的解决方案:如何找出语言中的字符按键?
链接地址: http://www.djcxy.com/p/42509.html