2010-06-29 81 views
6

我在窗体上有一个默认按钮,它上面有一个TSpinEdit控件。当TSpinEdit控件具有焦点并且用户按下Enter键时,用户只会听到系统嘟嘟声,因为Enter键对于TSpinEdit无效。在按下Enter时禁用TSpinEdit上的系统蜂鸣声

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

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

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

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

+5

你看在“<程序文件> \ Borland的\ Delphi5 \来源\样本\”? – 2010-06-29 14:51:04

+0

@Uwe,谢谢!这正是spin.pas所在的地方。我想我有一个文件搜索失败。 – 2010-06-29 15:35:27

回答

6

你必须从TSpinEdit下降,并覆盖IsValidChar避免的MessageBeep来电或KeyPress避免IsValidChar

+0

这就是我所做的,当然,尽管感谢Uwe帮助我找到了源! – 2010-06-30 16:38:12

+0

你介意举个例子吗? :) – 2013-07-18 18:01:45

7

试试这个

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

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

非常感谢您的信息,但我仍然希望听到其他无效键的哔声,因此如果我等到OnKeyDown事件触发,然后再禁用系统嘟嘟声,它似乎不会阻止嘟嘟声。 – 2010-06-29 15:27:42

+0

酷黑客。我不知道这件事。 – 2010-06-30 19:57:55

+0

这对我来说很有用,谢谢:D – Giovani 2015-02-07 19:58:31

2

设置的KeyPreview =真窗体上并将下面的代码添加到窗体的按键事件:

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;