2010-07-02 3 views
6

Je développe une application Delphi.
Lors d'un événement TImage.MouseDown, je souhaite exécuter la tâche X si la touche majuscule est enfoncée, Y tâche si la touche de contrôle est enfoncée et Z tâche si aucune de ces touches n'est enfoncée. Pour cela, j'utilise la variable TShiftState. Maintenant j'ai une fonction dans laquelle je dois passer cette variable en paramètre.Delphi: Comment utiliser la variable de type TShiftState?

procedure Something(keyState : TShiftState); 

Maintenant Dans cette fonction ce que je devrais juste pour vérifier l'état de la clé?

if KeyState <> ssShift then begin 

end; 

Le code ci-dessus montre une erreur.
Merci.

Répondre

9

IIUC vous voulez l'ensemble vide []:

Something([ssShift]); // X 
Something([ssCtrl]); // Y 
Something([]); // Z 

En ce qui concerne votre mise à jour:

procedure Something(keyState : TShiftState); 
begin 
    if ssShift in KeyState then // KeyState contains ssShift (and maybe more) 
    X; 
    if ssCtrl in KeyState then // KeyState contains ssCtrl (and maybe more) 
    Y; 
    if [ssShift, ssCtrl] * KeyState = [] then // KeyState contains neither ssShift nor ssCtrl 
    Z; 
end; 

Si vous ne souhaitez que ssShift et ssCtrl, et les autres valeurs (SSALT, ssLeft,. ..) ne comptent pas, vous pouvez masquer ce dernier sur les:

procedure Something(keyState : TShiftState); 
var 
    MaskedKeyState : TShiftState 
begin 
    MaskedKeyState := KeyState * [ssShift, ssCtrl]; 
    if ssShift in MaskedKeyState then // MaskedKeyState contains ssShift 
    X; 
    if ssCtrl in MaskedKeyState then // MaskedKeyState contains ssCtrl 
    Y; 
    if MaskedKeyState = [] then // MaskedKeyState contains neither ssShift nor ssCtrl 
    Z; 
end; 
+0

S'il vous plaît voir ma question éditée .. – Himadri

+0

Merci ... Vous fournissez tout ce dont j'ai besoin. – Himadri

4
if ssShift in keyState then 
    ShowMessage('1') 
else if ssCtrl in keyState then 
    ShowMessage('2') 
else 
    ShowMessage('3') 

essayer ce

Questions connexes