9

我在一个带有 TSpinEdit 控件的表单上有一个默认按钮。当 TSpinEdit 控件具有焦点并且用户按下 Enter 键时,用户不会单击默认按钮,而是会听到系统哔声,因为 Enter 键对于 TSpinEdit 无效。

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

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

那么,如何在 TSpinEdit 控件上按 Enter 键时禁用系统提示音?

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

4

3 回答 3

7

试试这个

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

//Enable system beep
SystemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_SENDWININICHANGE); 
于 2010-06-29T14:43:58.147 回答
7

您必须下降TSpinEdit并覆盖IsValidChar以避免 MessageBeep 调用或KeyPress避免IsValidChar.

于 2010-06-29T17:08:57.020 回答
5

在表单上设置 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;
于 2010-06-30T07:39:29.290 回答