我在表单上有一个默认按钮,上面有一个TSpinEdit控件。当TSpinEdit控件具有焦点并且用户按下Enter键时,用户只是听到系统发出蜂鸣声,因为Enter键对于TSpinEdit无效。
通常,为避免发出哔哔声,我会使用OnKeyPress事件并设置Key := 0
以跳过按键。然后我可以在默认按钮上执行click方法。但是,在这种情况下,OnKeyPress不会触发,因为Enter键无效。
OnKeyDown触发,但当我在那里设置Key := 0
时,它不会停止系统发出蜂鸣声。
那么,如何在TSpinEdit控件上按Enter键时禁用系统蜂鸣声?
我正在使用Delphi 5,他们没有包含Spin.pas的源代码。
答案 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;