2009-04-14 5 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

リンクは時代遅れであり、とにかく便利ではありません。私の反応を見てください。 –

0

日本語のひらがななどの文字を入力すると、いくつかのキーストロークが必要になることがあります。また、ドロップダウンメニューから適切な文字を選択することもあります。おそらく、テキストフィールドの変更イベントのような別のイベントをリスンしたいと思うかもしれません。

1

注:(これは、一般的には約キーボードメッセージで、一人でのActionScriptには適用されません。私は質問を読み違えると、より深い答えを提供し、その後役立ちました。)

本当に、窓はcharへのキーボードからのパスがAで非常に複雑なものです。

  • キーボードは、キーボードデバイスドライバ(KDD)にスキャンコードを送信します。
  • KDDはシステムメッセージキューにメッセージを送信します。
  • システムは、現在のキーボードフォーカスでウィンドウを作成したフォアグラウンドスレッドにメッセージを送信します。
  • スレッドのメッセージループがメッセージを取り出し、正しい文字変換を見つけ出します。

入力された '実際の'文字は、プロセス全体を終了するまで計算されません。各ウィンドウとスレッドは異なるロケールにあり、実際にはロケールを知らずにキーを翻訳することはできませんキーバッファの履歴

「WM_KEYDOWN」と「WM_KEYUP」メッセージは、単一の文字を構成するキーの数がわからないため、MapVirtualKeyなどで変換することはできません。単純な方法は、単に 'WM_CHAR'イベントを処理し、それを使用することです。次のことを考えてみましょう:

  • EN-USロケール、あなたは以下のキーA + '+押し、次のような出力 "A'A"
  • PT-BZのロケールを取得するには、a。次のキーを押してください+ '+、あなたはので、両方の例では、あなたが3 KEYDOWN、keyUpイベントメッセージになるだろう

『AA』次の出力を得るが、最初に、あなたは3 WM_CHARを取得し、第二に、あなたが唯一の2

を取得します

次の記事は基本的な概念には本当に良いです: http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx

1

charCodeまたはkeyCodeを効果的に使用して、入力された文字を判別することはできません。文字列のみを比較する必要があります。 KeyboardEventはあなたに入力テキストを与えません。これは愚かです。

私の場合は、TextEvent.TEXT_INPUTイベントに加えてKeyboardEvent.KEY_DOWNイベントを実装しました。後者のハンドラでは、charCodeが必要なすべての機能を実装しましたが、キーボードロケール(たとえばスペースバーまたは入力)に応じて変化しませんでした。前者では、イベントのテキストプロパティを調べて、ロケールに依存しないものを比較しました。

が、このポストは、そのソリューションに私を示唆したことを言及し忘れ:How to find out the character pressed key in languages?

関連する問題