2010-07-02 16 views
6

Pracuję nad aplikacją Delphi.
Na zdarzeniu TImage.MouseDown Chcę wykonać zadanie X, jeśli naciśnięto klawisz Shift, Y, jeśli naciśnięto klawisz Control i Z, jeśli żadna z nich nie zostanie naciśnięta. Do tego używam zmiennej TShiftState. Teraz mam funkcję, w której muszę przekazać tę zmienną jako parametr.Delphi: Jak używać zmiennej typu TShiftState?

procedure Something(keyState : TShiftState); 

Teraz Czy w tej funkcji powinienem sprawdzić stan klucza?

if KeyState <> ssShift then begin 

end; 

Powyższy kod pokazuje błąd.
Dzięki.

Odpowiedz

9

IIUC chcesz zbiór pusty []:

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

dotycząceTwojego UPDATE:

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; 

jeśli jesteś zainteresowany tylko w ssShift i ssCtrl, a inne wartości (ssAlt, ssLeft,. ..) nie ma znaczenia, możesz zamaskować te ostatnie:

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

Proszę zobaczyć moje edytowane pytanie .. – Himadri

+0

Dzięki ... Zapewnisz wszystko, czego potrzebuję. – Himadri

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

spróbuj tego