如果我將一個偵聽器添加到KeyboardEvent.KEY_DOWN,我可以找出keyCode和charCode。找出按下的字符
keyCode根據鍵盤映射到不同的字符。
中charCode是一樣沒用,根據幫助:
的字符代碼值爲英文鍵盤值。例如,如果按Shift + 3,日語鍵盤上的charCode就是#,就像在英文鍵盤上一樣。
那麼,我怎樣才能找出用戶按下哪個字符?
如果我將一個偵聽器添加到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)。
您的應用決定字符集是幹什麼用的,這意味着,即使你不得不使用不同的鍵盤當地人的單獨的密鑰產生相同的字符,就會有相同的則charCode。
輸入日語平假名等字符往往需要幾個按鍵,有時甚至從下拉菜單中選擇適當的字符。你可能想要聽一個不同的事件,就像是一個文本字段的變化事件。
注:(這是一個關於一般的鍵盤消息,並不適用於單獨的ActionScript我誤解的問題,並提供再更深的答案是有幫助的)
真的,從鍵盤到窗口字符的路徑是非常複雜的,它是這樣的:
這是類型是不計算直到它完成這整個過程中,每個窗口和線程可以在不同的語言環境,你不能真的「翻譯」的關鍵不知道現場的「真正的」字符和關鍵緩衝區歷史。
「WM_KEYDOWN」和「WM_KEYUP」消息不能用MapVirtualKey或其他東西轉換,因爲你不知道有多少按鍵組成一個字符。簡單的方法就是處理'WM_CHAR'事件並使用它。考慮以下幾點:
所以在這兩個例子中,你會得到3 KEYDOWN,KEYUP的消息,但在第一你得到3 WM_CHAR和第二你只能得到2
以下文章對於基本概念非常有用: http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx
您無法有效使用charCode
或keyCode
來確定輸入的字符。您只能比較字符串。 KeyboardEvent
不會給你輸入的文字,這也是愚蠢的。
在我的情況下,我實施了KeyboardEvent.KEY_DOWN
事件以及TextEvent.TEXT_INPUT
事件。在後者的處理程序中,我實現了需要charCode
的所有功能,並且每個鍵盤區域設置(例如,空格鍵或輸入)都沒有變化。在前者中,我檢查了事件的文本屬性,以比較我需要的區域獨立。
忘了提,這個帖子暗示我該解決方案:How to find out the character pressed key in languages?
的聯繫已經過時,也沒有什麼幫助呢。看到我的迴應。 – 2012-07-23 17:56:58