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