22 Voix

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

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.

RépondrePositifNégatif

Sur l’Auteur

AvatarVous 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

VirtualBox: Changer la Date et l'Heure

Tutoriel | 10 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.