Réponse aux messages indiquant la manipulation du clavier
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 :
- 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);
.
.
.
};
- 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é.