Réponse aux messages indiquant la manipulation du clavier

De RAD Studio
Aller à : navigation, rechercher

Remonter à Gestion des messages liés à la souris ou au clavier

Une méthode KeyDown est une méthode protégée de l'événement OnKeyDown d'un contrôle. Le contrôle lui-même appelle KeyDown en réponse au message Windows indiquant la manipulation du clavier. Lorsque vous redéfinissez la méthode KeyDown héritée, vous pouvez inclure le code qui apporte d'autres réponses en plus de l'appel à l'événement OnKeyDown.

Pour redéfinir KeyDown, suivez ces instructions :

  1. Ajoutez une méthode KeyDown à la classe TDBCalendar :
 type
   TDBCalendar = class(TSampleCalendar);
    .
    .
    .
   protected
     procedure KeyDown(var Key: Word; Shift: TShiftState; X: Integer; Y: Integer);
       override;
    .
    .
    .
   end;
 class PACKAGE TDBCalendar : public TSampleCalendar
 {
    .
    .
    .
 protected:
     virtual void __fastcall KeyDown(unsigned short &Key,  TShiftState Shift);
    .
    .
    .
 };
  1. Implémentez la méthode KeyDown :
 procedure KeyDown(var Key: Word; Shift: TShiftState);
 var
   MyKeyDown: TKeyEvent;
 begin
   if not ReadOnly and (Key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_END,
     VK_HOME, VK_PRIOR, VK_NEXT]) and FDataLink.Edit then
     inherited KeyDown(Key, Shift)
   else
   begin
     MyKeyDown := OnKeyDown;
     if Assigned(MyKeyDown) then MyKeyDown(Self, Key, Shift);
   end;
 end;
 
 void __fastcall TDBCalendar::KeyDown(unsigned short &Key,  TShiftState Shift)
 {
   TKeyEvent MyKeyDown;                                // déclare le type d'événement
   Set<unsigned short,0,8> keySet;
   keySet = keySet << VK_UP << VK_DOWN << VK_LEFT      // affecte les touches virtuelles à l'ensemble
     << VK_RIGHT << VK_END << VK_HOME << VK_PRIOR << VK_NEXT;
   if (!FReadOnly &&                              // si le contrôle n'est pas en lecture
       (keySet.Contains(Key)) &&                   // ...seule, si la touche est dans...
       FDataLink->Edit() )                         // ...l'ensemble et le champ en mode saisie.
   {
     TCustomGrid::KeyDown(Key, Shift);             // Appel de la méthode KeyDown héritée
   }
   else
   {
     MyKeyDown = OnKeyDown;                            // Affecte l'événement OnKeyDown
     if (MyKeyDown != NULL) MyKeyDown(this,Key,Shift); // Exécute le code du gestionnaire...
   }                                                   // ...d'événement OnKeyDown
 }


Lorsque KeyDown répond à un message indiquant la manipulation du clavier, la méthode KeyDown héritée est appelée uniquement si la propriété ReadOnly du contrôle vaut False, si la touche appuyée est une des touches de déplacement du curseur et si l'objet lien de données est en mode édition, c'est-à-dire si le champ peut être modifié. Si le champ ne peut être modifié ou si une autre touche a été pressée, le code mis par le programmeur dans le gestionnaire de l'événement OnKeyDown, s'il en existe un, est exécuté.