我正在开发一个Delphi应用程序.
在TImage.MouseDown事件中X,Y如果按下shift键,我想要执行任务,如果按下控制键则Z执行任务,如果没有按下任务,则执行任务.为此,我使用TShiftState变量.现在我有一个函数,我必须将此变量作为参数传递.
procedure Something(keyState : TShiftState);
Run Code Online (Sandbox Code Playgroud)
现在在这个函数中我应该检查密钥的状态吗?
if KeyState <> ssShift then begin
end;
Run Code Online (Sandbox Code Playgroud)
上面的代码显示错误.
谢谢.
Uli*_*rdt 11
IIUC你想要空集[]:
Something([ssShift]); // X
Something([ssCtrl]); // Y
Something([]); // Z
Run Code Online (Sandbox Code Playgroud)
关于你的更新:
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;
Run Code Online (Sandbox Code Playgroud)
如果你只对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;
Run Code Online (Sandbox Code Playgroud)
if ssShift in keyState then
ShowMessage('1')
else if ssCtrl in keyState then
ShowMessage('2')
else
ShowMessage('3')
Run Code Online (Sandbox Code Playgroud)
尝试这个
| 归档时间: |
|
| 查看次数: |
27061 次 |
| 最近记录: |