Delphi:如何使用TShiftState类型变量?
发布时间:2020-12-15 04:15:45 所属栏目:大数据 来源:网络整理
导读:我正在开发一个Delphi应用程序. 在T Image.MouseDown事件中,如果按下shift键,我想要执行X任务,如果按下控制键则执行Y任务,如果没有按下任何一个则执行Z任务.为此,我使用TShiftState变量.现在我有一个函数,我必须将此变量作为参数传递. procedure Something(k
我正在开发一个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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |