У меня есть кнопка по умолчанию на форме, которая имеет контроль TSpinEdit на ней. Когда управление TSpinEdit имеет фокус, и пользователь нажимает клавишу Enter вместо нажатой кнопки по умолчанию, пользователь просто слышит, что система подает звуковой сигнал, потому что клавиша Enter недопустима для TSpinEdit.
Обычно, для предотвращения звукового сигнала я использовал бы событие OnKeyPress и установил бы Key := 0
пропускать нажатие клавиши. Я мог затем выполнить метод щелчка на кнопке по умолчанию. Однако в этом случае OnKeyPress не стреляет, потому что клавиша Enter не допустима.
Пожары в OnKeyDown, но когда я установил Key := 0
там, это не останавливает системный звуковой сигнал.
Так, как я отключаю системный звуковой сигнал при нажатии клавиши Enter на управлении TSpinEdit?
Я нахожусь на Delphi 5, и они не включали источник для Spin.pas.
Вы должны спуститься из TSpinEdit
и переопределить IsValidChar
, чтобы избежать вызова MessageBeep, или KeyPress
, чтобы избежать IsValidChar
.
Попробовать
//Disable system beep
SystemParametersInfo(SPI_SETBEEP, 0, nil, SPIF_SENDWININICHANGE);
//Enable system beep
SystemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_SENDWININICHANGE);
Установите 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;