gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:43:07 25 4
gpt4 key购买 nike

我正在开发一个 Delphi 应用程序。
在 TImage.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:如何使用TShiftState类型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3164372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com