2010-07-02 7 views
6

Ich entwickle eine Delphi-Anwendung.
Auf TImage.MouseDown Ereignis Ich möchte X Aufgabe tun, wenn Shift-Taste gedrückt wird, Y Aufgabe, wenn die Steuer-Taste gedrückt wird und Z Aufgabe, wenn keiner von ihnen gedrückt wird. Dafür verwende ich TShiftState Variable. Jetzt habe ich eine Funktion, in der ich diese Variable als Parameter übergeben muss.Delphi: Wie verwendet man TShiftState Typ Variable?

procedure Something(keyState : TShiftState); 

Jetzt In dieser Funktion, was sollte ich Recht, den Zustand des Schlüssels zu überprüfen?

if KeyState <> ssShift then begin 

end; 

Der obige Code zeigt Fehler.
Danke.

Antwort

9

IIUC wollen Sie die leere Menge []:

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

In Bezug auf Ihre 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; 

Wenn Sie daran interessiert sind nur in ssShift und ssCtrl, und die anderen Werte (ssAlt, ssLeft. ..) keine Rolle spielen, können Sie die letzteren maskieren:

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

Bitte sehen Sie meine bearbeitete Frage .. – Himadri

+0

Danke ... Sie bieten alles, was ich brauche. – Himadri

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

versuchen Sie dies

Verwandte Themen