2010-07-02 2 views
6

저는 Delphi 응용 프로그램을 개발 중입니다.
TImage.MouseDown 이벤트에서 Shift 키를 누르면 X 작업을 수행하고 싶습니다. 제어 키를 누르면 Y 작업이 수행되고 아무 키도 누르지 않으면 Z 작업이 수행됩니다. 그 때문에 나는 TShiftState 변수를 사용하고 있습니다. 이제는이 변수를 매개 변수로 전달해야하는 함수가 있습니다.Delphi : TShiftState 유형 변수를 사용하는 방법?

procedure Something(keyState : TShiftState); 

지금이 기능에서는 키의 상태를 확인해야합니까?

if KeyState <> ssShift then begin 

end; 

위의 코드는 오류를 보여줍니다.
감사합니다. 당신이 ssShift 및 ssCtrl에만 관심이 있다면

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; 

, 다른 값 (ssAlt, ssLeft : 당신의 갱신에 관한

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

:

답변

9

IIUC 당신은 빈 세트 []를 원한다. ..) 중요하지 않아도 후자를 마스크 할 수 있습니다.

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

내 편집 된 질문을 참조하십시오. – Himadri

+0

감사합니다 ... 필요한 모든 것을 제공합니다. – Himadri

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

시도해주세요.

관련 문제