Vcl.Controls.TWinControl.OnKeyPress
Delphi
property OnKeyPress: TKeyPressEvent read FOnKeyPress write FOnKeyPress;
C++
__property TKeyPressEvent OnKeyPress = {read=FOnKeyPress, write=FOnKeyPress};
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
event | protected | Vcl.Controls.pas Vcl.Controls.hpp |
Vcl.Controls | TWinControl |
Description
Se produit lorsqu'une touche est appuyée.
Le gestionnaire d'événement OnKeyPress permet d'effectuer un traitement spécifique quand une touche correspondant à un caractère alphanumérique est enfoncée.
Le paramètre Key du gestionnaire d'événement OnKeyPress est de type Char ; cependant l'événement OnKeyPress enregistre le caractère ASCII correspondant à la touche enfoncée. Les touches qui ne correspondent pas à une valeur Char ASCII (Maj ou F1, par exemple) ne génèrent pas un événement OnKeyPress. Les combinaisons de touches (comme Maj+A) ne génèrent qu'un seul événement OnKeyPress (dans cet exemple, Maj+A donne pour Key la valeur “A” si Verr Maj est désactivé). Pour répondre aux touches non-ASCII ou aux combinaisons de touches, utilisez le gestionnaire d'événement OnKeyDown ou OnKeyUp.
Une application récupère les messages Windows WM_KEYDOWN de toutes les touches quand l'utilisateur appuie sur une touche. Ces messages déclenchent indirectement l'événement OnKeyDown. En définissant Key sur #0, vous empêchez tout traitement ultérieur de ce message. Mais pour les touches qui génèrent des caractères, Windows produit également le message WM_CHAR. Au moment du déclenchement de votre événement OnKeyDown, le message WM_CHAR de la touche sera déjà dans la file d'attente des messages. Comme la définition de Key sur #0 n'arrête pas sa livraison, l'événement OnKeyPress est déclenché. En définissant Key sur #0, OnKeyPress n'a pas le droit d'être déclenché pour les touches n'ayant pas de caractères. Pour les touches représentant des caractères, OnKeyPress continuera à être déclenché.
Cette méthode d'organisation du traitement des touches a des avantages. Le code ne prenant en charge que les caractères, y compris les caractères de contrôle comme #13 pour le retour chariot, #3 pour CTROL-C et ainsi de suite, doit être placé dans l'événement OnKeyPress. Le code prenant en charge les touches qui ne génèrent pas de caractères doit être placé dans l'événement OnKeyDown.