入力言語変更メッセージの処理
Windows API メッセージング ソリューションの使用 への移動
Windows メッセージ WM_INPUTLANGCHANGE は、デフォルトでは、入力言語が変更されたときに、現在フォーカスのあるコントロール(ウィンドウ)に送られます。しかし、時には、フォーカスのあるコントロールだけでなく、フォーム上のすべてのコントロールが入力言語の変更を知っていなければならない場合もあります。そのような状況の一例として、1 つまたは複数の仮想キーボード(TTouchKeyboard)がフォームに存在する場合が挙げられます。
この問題を回避するために、カスタム メッセージ CM_INPUTLANGCHANGE が作成され VCL に追加されました。このメッセージに加えて、以下のアクションが記載順に起こります。
- ユーザーが言語を変更します。
- TWinControl のすべての下位クラスが WM_INPUTLANGCHANGE をリスンします。
- WM_INPUTLANGCHANGE がアクティブなコントロールに送信されます。
- Application が nil でない場合は、TWinControl が、同じ WParam および LParam のカスタム メッセージ CM_INPUTLANGCHANGE を TApplication に送信します。TApplication またはルートの TWinControl が CM_INPUTLANGCHANGE をリスンした後、そのメッセージを TWinControls のすべての子にブロードキャストします。
- Application が nil の場合は、ルートの TWinControl が、渡されたのと同じ WParam および LParam のカスタム メッセージ CM_INPUTLANGCHANGE を送信します。
- TApplication またはルートの TWinControl が CM_INPUTLANGCHANGE をリスンした後、そのメッセージを TWinControls のすべての子にブロードキャストします。
CM_INPUTLANGCHANGE イベントのカスタム ハンドラを作成するには、コントロールでメッセージ メソッドを宣言する必要があります。
procedure CMInputLangChange(var Message: TMessage); message CM_INPUTLANGCHANGE;