Disable system beep on TSpinEdit when pressing Enter
I have a default button on a form that has a TSpinEdit control on it. When the TSpinEdit control has the focus and the user presses the Enter key, instead of the default button getting clicked, the user just hears a system beep because the Enter key is invalid for a TSpinEdit.
Normally, to avoid the beep, I would use the OnKeyPress event and set the Key := 0
to skip the key press. I could then execute the click method on the default button. However, in this cas开发者_开发问答e, OnKeyPress doesn't fire because the Enter key is not valid.
OnKeyDown fires, but when I set Key := 0
there, it doesn't stop the system beep.
So, how do I disable the system beep when pressing the Enter key on a TSpinEdit control?
I'm on Delphi 5, and they didn't include the source for Spin.pas.
You have to descend from TSpinEdit
and override IsValidChar
to avoid the MessageBeep call or KeyPress
to avoid IsValidChar
.
Try this one
//Disable system beep
SystemParametersInfo(SPI_SETBEEP, 0, nil, SPIF_SENDWININICHANGE);
//Enable system beep
SystemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_SENDWININICHANGE);
Set KeyPreview = True on your form and add the following code to the form's keypress event:
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;
精彩评论