2010-06-29 63 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;