gpt4 book ai didi

delphi - 如何避免在 TEdit 聚焦时按下 Escape 时发出 clang ?

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

在我几年前开发的代码中,我经常使用它来随时按 Escape 键关闭当前表单:

procedure TSomeForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #27 then close;
end;

此行为是为 TForm 定义的。表单的 KeyPreview 属性设置为 True 以使表单在任何其他组件之前对按键使用react。对于程序的最佳部分来说,这一切都运行得很好,但是,当 TEdit 组件聚焦时按下 Escape 键时,会发出声音(Windows 使用声音来表示无效操作) 。它仍然工作正常,但我从未完全消除声音。

这有什么问题吗?

<小时/>

重新创建的步骤:

  • 新的 VCL Forms 应用程序,将表单的 KeyPreview 设置为 true
  • 在“事件”选项卡上双击 onKeyPress 事件并输入虚拟代码:

    如果 key=#27 那么 ;

  • 将 TListBox、TCheckBox、TEdit 添加到表单并运行应用程序

  • 在应用程序中尝试按 Esc 键,但没有任何反应,如虚拟代码所指定
  • 聚焦 TEdit 并按 Esc。没有任何反应,但播放了声音。

最佳答案

您听到 clang 是因为您在输入中留下了 ESC。看看 Key 是如何成为 var 的?将其设置为#0,即可消除 clang 。这使其免于进一步处理。

procedure TSomeForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #27 then
begin
key := #0;
close;
end;
end;

KeyPreview 就是这样,预览将传递给控件的内容,除非您停止它。

关于delphi - 如何避免在 TEdit 聚焦时按下 Escape 时发出 clang ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/770207/

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