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

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

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

@H_301_3@if KeyState <> ssShift then begin end;

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

解决方法

IIUC你想要空集[]: @H_301_3@Something([ssShift]); // X Something([ssCtrl]); // Y Something([]); // Z

关于你的更新:

@H_301_3@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,…)无关紧要,你可以掩盖后者:

@H_301_3@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;
原文链接:https://www.f2er.com/delphi/101960.html

猜你在找的Delphi相关文章