入力言語変更メッセージの処理

提供: RAD Studio
移動先: 案内検索

Windows API メッセージング ソリューションの使用 への移動


Windows メッセージ WM_INPUTLANGCHANGE は、デフォルトでは、入力言語が変更されたときに、現在フォーカスのあるコントロール(ウィンドウ)に送られます。しかし、時には、フォーカスのあるコントロールだけでなく、フォーム上のすべてのコントロールが入力言語の変更を知っていなければならない場合もあります。そのような状況の一例として、1 つまたは複数の仮想キーボードTTouchKeyboard)がフォームに存在する場合が挙げられます。

この問題を回避するために、カスタム メッセージ CM_INPUTLANGCHANGE が作成され VCL に追加されました。このメッセージに加えて、以下のアクションが記載順に起こります。

  1. ユーザーが言語を変更します。
  2. TWinControl のすべての下位クラスが WM_INPUTLANGCHANGE をリスンします。
  3. WM_INPUTLANGCHANGE がアクティブなコントロールに送信されます。
  4. Application が nil でない場合は、TWinControl が、同じ WParam および LParam のカスタム メッセージ CM_INPUTLANGCHANGETApplication に送信します。TApplication またはルートの TWinControlCM_INPUTLANGCHANGE をリスンした後、そのメッセージを TWinControls のすべての子にブロードキャストします。
  5. Application が nil の場合は、ルートの TWinControl が、渡されたのと同じ WParam および LParam のカスタム メッセージ CM_INPUTLANGCHANGE を送信します。
  6. TApplication またはルートの TWinControlCM_INPUTLANGCHANGE をリスンした後、そのメッセージを TWinControls のすべての子にブロードキャストします。

CM_INPUTLANGCHANGE イベントのカスタム ハンドラを作成するには、コントロールでメッセージ メソッドを宣言する必要があります。

procedure CMInputLangChange(var Message: TMessage); message CM_INPUTLANGCHANGE;