gpt4 book ai didi

Delphi FormKeyDown ALT 键卡住

转载 作者:行者123 更新时间:2023-12-02 02:55:17 24 4
gpt4 key购买 nike

我有一个带有 2 个复选框的表单(1 个用于按住 CTRL - 1 个用于按住 ALT)。两个复选框都被禁用,因此表单的 KeyDown 事件 可以正常工作。还有一个 TTimer,如果按下 ALT/CTRL 键,每 10 毫秒同步一次。

我的计时器:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
CheckBox1.Checked := ALTDOWN; // ALTDOWN IS GLOBAL
CheckBox2.Checked := CTRLDOWN; // CTRLDOWN IS GLOBAL
end;

我的KeyDown事件:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_MENU then begin
ALTDOWN := TRUE;
exit;
end;
if Key = VK_CONTROL then begin
CTRLDOWN := TRUE;
exit;
end;
end;

我的KeyUP事件:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_MENU then begin
ALTDOWN := FALSE;
exit;
end;
if Key = VK_CONTROL then begin
CTRLDOWN := FALSE;
exit;
end;
end;

使用 CTRL 键不会出现任何问题。但 ALT 键有时会卡住,甚至根本不显示。当我仅按 ALT 键(没有组合任何其他键)时,会发生这种情况。

这是为什么?我该如何解决这个问题?

最佳答案

如果您要以这种方式运行计时器,那么您不妨调用 GetAsyncKeyState

procedure TForm1.Timer1Timer(Sender: TObject);
begin
CheckBox1.Checked := GetAsyncKeyState(VK_MENU)<0;
CheckBox2.Checked := GetAsyncKeyState(VK_CONTROL)<0;
end;

只需删除 OnKeyDownOnKeyUp 事件处理程序即可。当系统已经这样做时,您尝试跟踪按键是按下还是按下确实没有任何意义。

您的计时器间隔很短。无论如何,系统不会那么频繁地解雇他们。如果我没记错的话,计时器分辨率通常约为 50 毫秒。

关于Delphi FormKeyDown ALT 键卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12203274/

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