Delphi/Lazarus: La touche ALT, SHIFT ou CTRL est-elle enfoncée?
Tutoriel de Stefan Trost | 22/02/2024 à 22:36
Parfois, nous voulons vérifier dans un événement de clavier, dans un événement de souris ou à un autre endroit arbitraire de notre programme, si l'utilisateur maintient une ou plusieurs des touches ALT, ALT GR, SHIFT ou CTRL enfoncées en ce moment. Pour le savoir, le ShiftState nous aide.
Dans ce qui suit, nous aimerions voir comment interroger et utiliser ShiftState dans les événements standard du clavier ou de la souris ainsi que comment cela fonctionne en dehors des événements standard. Enfin, nous souhaitons également voir comment utiliser ShiftState en conjonction avec d'autres clés pour vérifier des combinaisons de touches:
- ShiftState dans les Événements Standard
- ShiftState dans une Propre Procédure
- ShiftState en Combinaison avec d’autres Touches
ShiftState dans les Événements Standard
Le moyen le plus simple d'interroger les touches de modification enfoncées est d'utiliser une procédure standard dans Delphi ou Lazarus, qui nous fournit déjà une variable de ShiftState. C'est le cas, par exemple, dans les événements par défaut OnMouseDown (le bouton de la souris est enfoncé), OnMouseUp (la souris est relâchée), OnMouseMove (la souris est déplacée), OnMouseWheel (la molette de la souris est déplacée), OnKeyDown (une touche est enfoncée) ou OnKeyUp. (la clé est relâchée).
Regardons un court exemple:
procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ssAlt in Shift then ShowMessage('ALT'); if ssShift in Shift then ShowMessage('SHIFT'); if ssCtrlv in Shift then ShowMessage('STRG'); if ssAltGr in Shift then ShowMessage('ALT GR'); if ssLeft in Shift then ShowMessage('Touche Gauche de la Souris'); if ssRight in Shift then ShowMessage('Touche Droite de la Souris'); if ssMiddle in Shift then ShowMessage('Touche Centrale de la Souris'); if ssDoubleClick in Shift then ShowMessage('Double-Clic'); end;
Ici, par exemple, nous avons défini l'événement OnKeyUp pour un champ Edit (TEdit). Automatiquement, les variables Key et Shift sont disponibles à partir desquelles nous pouvons récupérer quelle touche normale est enfoncée (variable Key) et quelle touche spéciale a été enfoncée pendant l'appui sur la touche (variable Shift).
Ensuite, pour savoir si l'utilisateur maintient la touche ALT, SHIFT, CTRL ou ALT GR, en utilisant Shift State, il est également possible d'obtenir des informations sur la souris (le bouton droit ou gauche de la souris est-il enfoncé ou y a-t-il un double clic, par exemple). Dans le code ci-dessus, nous vérifions certains de ces états et envoyons un message à l'utilisateur pour l'informer de l'état actuel.
ShiftState dans une Propre Procédure
Lors de l'écriture de notre propre procedure ou function, bien entendu, Delphi ou Lazarus ne rendent pas automatiquement la variable "Shift" disponible. Néanmoins, il est toujours possible de récupérer l’état actuel du shift.
procedure MyOwnProcedure; var currentShiftState: TShiftState; begin currentShiftState := GetKeyShiftState; if ssShift in currentShiftState then ShowMessage('SHIFT'); end;
Nous déclarons simplement une variable du type TShiftState. Appelons-le currentShiftState comme dans notre exemple de code. Avec la fonction GetKeyShiftState, nous pouvons demander l'état actuel du shift et le stocker dans notre variable. Après cela, nous pouvons travailler avec comme nous l'avons fait dans le premier exemple.
ShiftState en Combinaison avec d’autres Touches
Bien entendu, nous pouvons également combiner la requête du Shift State avec la requête d’autres touches et ainsi vérifier les combinaisons de touches enfoncées. Jetons un coup d'œil à un autre petit exemple:
procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Shift = [ssCtrl]) and (key = ord('A')) then begin ShowMessage('CTRL + A a été cliqué'); end; if (ssShift in Shift) and (ssAlt in Shift) then begin ShowMessage('Les touches SHIFT et ALT sont maintenues enfoncées') end; end;
Tout d'abord, nous vérifions si l'utilisateur a appuyé sur le raccourci clavier CTRL + A en cochant non seulement Shift pour ssCTRL mais également si la touche A a été enfoncée en même temps en évaluant la variable Key. Puisque Key est du type Word, nous devons d'abord convertir "A" en une valeur numérique pour cela (nous pourrions également vérifier directement pour 65).
Par la suite, nous vérifions si la touche SHIFT ainsi que la touche ALT sont enfoncées en même temps.
Sur l’Auteur
Vous pouvez trouver des logiciels de Stefan Trost sur fr.sttmedia.com. Avez-vous besoin d'un logiciel personnalisé selon vos propres besoins? Écrivez-nous: fr.sttmedia.com/contact
Voir Profil
Sujets Connexes
MySQL: Sauts de Ligne dans MySQL
Conseil | 0 Commentaires
Script Batch: Arrêter Ordinateur Windows
Tutoriel | 4 Commentaires
Delphi/Lazarus: Sélectionner tout avec CTRL+A dans ListView
Conseil | 0 Commentaires
VirtualBox: Changer la Date et l'Heure
Tutoriel | 10 Commentaires
Renommer des Fichiers en ses Noms de Dossier
Tutoriel | 0 Commentaires
Où se trouve la Touche Shift sur mon Clavier?
Question | 1 Réponse
Delphi/Lazarus: Fermer Programme avec la Touche ESC
Conseil | 0 Commentaires
Avis Important
Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.
Participer
Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.