2009-04-14 20 views
7

如果我將一個偵聽器添加到KeyboardEvent.KEY_DOWN,我可以找出keyCode和charCode。找出按下的字符

keyCode根據鍵盤映射到不同的字符。

中charCode是一樣沒用,根據幫助:

的字符代碼值爲英文鍵盤值。例如,如果按Shift + 3,日語鍵盤上的charCode就是#,就像在英文鍵盤上一樣。

那麼,我怎樣才能找出用戶按下哪個字符?

回答

2

你忽略了報價的一個非常重要的一部分,或者它缺少在哪裏找到它:

例如,如果您按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。

+0

的聯繫已經過時,也沒有什麼幫助呢。看到我的迴應。 – 2012-07-23 17:56:58

0

輸入日語平假名等字符往往需要幾個按鍵,有時甚至從下拉菜單中選擇適當的字符。你可能想要聽一個不同的事件,就像是一個文本字段的變化事件。

1

注:(這是一個關於一般的鍵盤消息,並不適用於單獨的ActionScript我誤解的問題,並提供再更深的答案是有幫助的)

真的,從鍵盤到窗口字符的路徑是非常複雜的,它是這樣的:

  • 鍵盤發送scancode到鍵盤設備驅動程序(KDD)。
  • KDD向系統消息隊列發送消息。
  • 然後系統將消息發送到創建具有當前鍵盤焦點的窗口的前臺線程。
  • 線程的消息循環拾取消息並計算出正確的字符轉換。

這是類型是不計算直到它完成這整個過程中,每個窗口和線程可以在不同的語言環境,你不能真的「翻譯」的關鍵不知道現場的「真正的」字符和關鍵緩衝區歷史。

「WM_KEYDOWN」和「WM_KEYUP」消息不能用MapVirtualKey或其他東西轉換,因爲你不知道有多少按鍵組成一個字符。簡單的方法就是處理'WM_CHAR'事件並使用它。考慮以下幾點:

  • EN-US區域,您按以下鍵A +'+一個,你會得到以下輸出 「A'A」
  • PT-BZ區域,您按以下鍵一+'+ A,你會得到以下輸出‘AA’

所以在這兩個例子中,你會得到3 KEYDOWN,KEYUP的消息,但在第一你得到3 WM_CHAR和第二你只能得到2

以下文章對於基本概念非常有用: http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx

1

您無法有效使用charCodekeyCode來確定輸入的字符。您只能比較字符串。 KeyboardEvent不會給你輸入的文字,這也是愚蠢的。

在我的情況下,我實施了KeyboardEvent.KEY_DOWN事件以及TextEvent.TEXT_INPUT事件。在後者的處理程序中,我實現了需要charCode的所有功能,並且每個鍵盤區域設置(例如,空格鍵或輸入)都沒有變化。在前者中,我檢查了事件的文本屬性,以比較我需要的區域獨立。

忘了提,這個帖子暗示我該解決方案:How to find out the character pressed key in languages?

相關問題