Gestion du message de changement de la langue d'entrée

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation de la solution de messagerie de l'API Windows


Le message Windows WM_INPUTLANGCHANGE est envoyé par défaut au contrôle (fenêtre) qui détient actuellement la focalisation, quand la langue d'entrée est changée. Tous les contrôles d'une fiche doivent parfois être informés du changement de la langue d'entrée, et pas seulement celui détenant la focalisation. Voici un exemple d'une telle situation : quand un ou plusieurs claviers virtuels (TTouchKeyboard) sont présents sur la fiche.

Pour éviter ce problème, le message personnalisé CM_INPUTLANGCHANGE a été créé et ajouté à la VCL. En plus de ce message, les actions suivantes se produisent dans l'ordre ci-après :

  1. L'utilisateur change la langue.
  2. Tous les descendants de TWinControl écoutent WM_INPUTLANGCHANGE.
  3. WM_INPUTLANGCHANGE est envoyé au contrôle actif.
  4. Si Application ne vaut pas nil, le TWinControl envoie alors le message personnalisé, CM_INPUTLANGCHANGE avec les mêmes WParam et LParam à TApplication. TApplication ou le TWinControl racine écoute CM_INPUTLANGCHANGE, puis diffuse le message à tous les TWinControls enfants.
  5. Si Application vaut nil, le TWinControl racine envoie alors le message personnalisé, CM_INPUTLANGCHANGE, avec les mêmes WParam et LParam qui ont été passés.
  6. TApplication ou le TWinControl racine écoute CM_INPUTLANGCHANGE, puis diffuse le message à tous les TWinControls enfants.

Pour écrire un gestionnaire personnalisé pour l'événement CM_INPUTLANGCHANGE, vous devez déclarer une méthode de message dans votre contrôle :

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