【问题标题】:Disable system beep on TSpinEdit when pressing Enter按 Enter 时禁用 TSpinEdit 上的系统提示音
【发布时间】:2010-06-29 14:36:15
【问题描述】:

我在一个带有 TSpinEdit 控件的表单上有一个默认按钮。当 TSpinEdit 控件获得焦点并且用户按下 Enter 键时,用户不会单击默认按钮,而是会听到系统提示音,因为 Enter 键对于 TSpinEdit 无效。

通常,为了避免发出哔哔声,我会使用 OnKeyPress 事件并设置 Key := 0 以跳过按键。然后我可以在默认按钮上执行 click 方法。但是,在这种情况下,OnKeyPress 不会触发,因为 Enter 键无效。

OnKeyDown 触发,但是当我在那里设置 Key := 0 时,它不会停止系统蜂鸣声。

那么,如何在 TSpinEdit 控件上按 Enter 键时禁用系统提示音?

我在 Delphi 5 上,他们没有包含 Spin.pas 的源代码。

【问题讨论】:

  • 您查看过“\Borland\Delphi5\Source\Samples\”吗?
  • @Uwe,谢谢!这正是 spin.pas 所在的地方。我想我的文件搜索失败了。

标签: delphi beep


【解决方案1】:

您必须从TSpinEdit 下降并覆盖IsValidChar 以避免MessageBeep 调用或KeyPress 以避免IsValidChar

【讨论】:

  • 这当然是我做的,不过感谢 Uwe 帮我找到源头!
【解决方案2】:

试试这个

//Disable system beep
SystemParametersInfo(SPI_SETBEEP, 0, nil, SPIF_SENDWININICHANGE); 

//Enable system beep
SystemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_SENDWININICHANGE); 

【讨论】:

  • 感谢您提供的重要信息,但我仍然想听到其他无效键的哔声,所以如果我等到 OnKeyDown 事件触发后再禁用系统哔声,它似乎不会防止发出哔哔声。
  • 酷黑客。我不知道这件事。
  • -1。这是针对局部问题的全局“解决方案”。这也会影响其他应用程序。不要这样做。
【解决方案3】:

在表单上设置 KeyPreview = True 并将以下代码添加到表单的按键事件中:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if SpinEdit1.Focused and (Key = #13) then
  begin
    Key := #0; // Cancels the keypress
    Perform(CM_DIALOGKEY, VK_RETURN, 0); // Invokes the default button
  end;
end;

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2011-09-11
    • 2021-10-28
    • 2014-07-07
    • 2013-09-17
    相关资源
    最近更新 更多