按Enter键时,在TSpinEdit上禁用系统蜂鸣声

Mar*_*ams 8 delphi beep

我在表单上有一个默认按钮,上面有一个TSpinEdit控件.当TSpinEdit控件具有焦点并且用户按下Enter键时,用户只是听到系统发出蜂鸣声,因为Enter键对于TSpinEdit无效.

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

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

那么,如何在TSpinEdit控件上按Enter键时禁用系统蜂鸣声?

我正在使用Delphi 5,他们没有包含Spin.pas的源代码.

Fra*_*ois 7

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


Bha*_*rat 6

试试这个吧

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

//Enable system beep
SystemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_SENDWININICHANGE); 
Run Code Online (Sandbox Code Playgroud)

  • -1.这是解决当地问题的全球"解决方案".这也会影响其他应用程序.不要这样做. (2认同)

Cob*_*ger 6

在表单上设置 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;
Run Code Online (Sandbox Code Playgroud)