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

时间:2010-06-29 14:36:16

标签: delphi beep

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

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

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

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

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

3 个答案:

答案 0 :(得分:7)

您必须从TSpinEdit下载并覆盖IsValidChar以避免发出MessageBeep,或KeyPress以避免IsValidChar

答案 1 :(得分:6)

试试这个

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

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

答案 2 :(得分: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;