Behandlung von Botschaften über die Änderung der Eingabesprache

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Verwenden der Windows-API-Botschaftslösung


Beim Ändern der Eingabesprache wird die Windows-Botschaft WM_INPUTLANGCHANGE standardmäßig an das Steuerelement (Fenster) gesendet, das aktuell den Fokus besitzt. In manchen Situationen müssen aber alle Steuerelemente auf einem Formular über die Änderung der Eingabesprache informiert werden, und nicht nur dasjenige, das den Fokus besitzt. Ein Beispiel für eine derartige Situation ist das Vorhandensein einer oder mehrerer virtueller Tastaturen (TTouchKeyboard) auf dem Formular.

Für diese Situationen wurde die benutzerdefinierte Botschaft CM_INPUTLANGCHANGE erstellt und der VCL hinzugefügt. Zusätzlich zu dieser Botschaft werden die folgenden Aktionen in der folgenden Reihenfolge ausgeführt:

  1. Der Benutzer ändert die Sprache.
  2. Alle Nachkommen von TWinControl warten auf WM_INPUTLANGCHANGE.
  3. WM_INPUTLANGCHANGE wird an das aktive Steuerelement gesendet.
  4. Wenn Application nicht nil ist, dann sendet TWinControl die Botschaft CM_INPUTLANGCHANGE mit denselben Parametern WParam und LParam an TApplication. TApplication oder das Stamm-TWinControl empfängt CM_INPUTLANGCHANGE und sendet die Botschaft an alle untergeordneten TWinControls.
  5. Wenn Application nil ist, dann sendet das Stamm-TWinControl die Botschaft CM_INPUTLANGCHANGE mit denselben Parametern WParam und LParam, die übergeben wurden.
  6. TApplication oder das Stamm-TWinControl empfängt CM_INPUTLANGCHANGE und sendet die Botschaft an alle untergeordneten TWinControls.

Zum Schreiben einer benutzerdefinierter Behandlungsroutine für das Ereignis CM_INPUTLANGCHANGE sollten Sie eine Botschaftsmethode in Ihrem Steuerelement deklarieren:

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