Delphi:如何使用TShiftState类型变量?

前端之家收集整理的这篇文章主要介绍了Delphi:如何使用TShiftState类型变量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个Delphi应用程序.
在T Image.MouseDown事件中,如果按下shift键,我想要执行X任务,如果按下控制键则执行Y任务,如果没有按下任何一个则执行Z任务.为此,我使用TShiftState变量.现在我有一个函数,我必须将此变量作为参数传递.
procedure Something(keyState : TShiftState);

现在在这个函数中我应该检查密钥的状态吗?

if KeyState <> ssShift then begin

end;

上面的代码显示错误.
谢谢.

解决方法

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;

猜你在找的Delphi相关文章