Delphi:如何使用TShift状态类型变量?
我正在开发一个Delphi应用程序。Delphi:如何使用TShift状态类型变量?,delphi,keypress,Delphi,Keypress,我正在开发一个Delphi应用程序。 在TImage.MouseDown事件中,如果按下shift键,我想执行X任务;如果按下控制键,我想执行Y任务;如果未按下任何键,我想执行Z任务。为此,我使用了TShiftState变量。现在我有一个函数,在其中我必须传递这个变量作为参数 procedure Something(keyState : TShiftState); 现在在这个函数中,我应该正确地检查键的状态是什么 if KeyState <> ssShift then begin
在TImage.MouseDown事件中,如果按下shift键,我想执行
X
任务;如果按下控制键,我想执行Y
任务;如果未按下任何键,我想执行Z
任务。为此,我使用了TShiftState
变量。现在我有一个函数,在其中我必须传递这个变量作为参数
procedure Something(keyState : TShiftState);
现在在这个函数中,我应该正确地检查键的状态是什么
if KeyState <> ssShift then begin
end;
如果键状态为ssShift,则开始
结束;
上述代码显示错误。谢谢。IIUC您想要空位
[]
:
Something([ssShift]); // X
Something([ssCtrl]); // Y
Something([]); // Z
关于您的更新:
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;
如果您只对ssShift和ssCtrl感兴趣,而其他值(ssAlt、ssLeft等)无关紧要,则可以忽略后一个值:
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;
试试这个谢谢。。。你提供了我所需要的一切。
if ssShift in keyState then
ShowMessage('1')
else if ssCtrl in keyState then
ShowMessage('2')
else
ShowMessage('3')