Suppressing success beep sounds on enter, but leave error beep sounds in
我有一个相当大的程序,我需要一种方法来抑制按 Enter 键时发出的所有 Windows 哔声。我找到了一个可以抑制所有哔声的功能,但是当出现问题时我需要发出错误声音,所以这不是一个选项。我看到您可以通过将 Key 设置为 0 来抑制单个文本框的声音,但这不是一个选项,因为我的程序中有很多按键事件。
您可以通过将
1 2 3 4 5 | procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) or (Key=#27) then Key := #0; end; |
如果您有一些您希望接受 ENTER 或 ESCAPE 的控件,例如多行编辑控件,那么您可以将
1 2 3 4 5 | procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) or (Key=#27) then Key := #0; end; |
或者您可以将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function IsSingleLineEdit(Edit: TCustomEdit): Boolean; var Style: DWORD; begin Style := GetWindowLongPtr(Edit.Handle, GWL_STYLE); Result := Style and ES_MULTILINE = 0; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if (ActiveControl is TCustomEdit) and IsSingleLineEdit(TCustomEdit(ActiveControl)) then if (Key=#13) or (Key=#27) then Key := #0; end; |
但是,我建议您不要做这些事情。我建议您保留当前的行为。如果表单和焦点控件都不会响应这些按键,那么哔哔声是最合适的响应。用户在想要取消当前对话框时按下 ESCAPE。如果您不打算对此做出响应,则系统会发出哔哔声以表明这一点。同样,当用户想要接受当前对话框时,她按下 ENTER。同样,由于您的对话框没有响应,因此发出哔声是合适的。
I saw you could surpress the sound for a single textbox by setting the Key to 0, but this is not an option as there are a LOT of keypress events in my program. Is there any solution to this?
这实际上是执行此操作的正确方法,前提是特定的 EditBox 确实具有适当的代码来在按下 Enter 键时执行某些操作。
如果您没有任何特定代码来处理在某些字段中按 Enter 键时的某些操作,那么应该听到 Ding 的声音来告诉用户他做错了什么。
如果您将特定的编辑框限制为仅数字,也会如此。这样每当用户按下任何字母键时,都会播放 Ding 声音,并且用户知道不允许使用字母。否则用户可能会认为他的键盘有问题。
您不会想成为一个制作软件的人,该软件的使用导致许多键盘被破坏。或者你会吗? :-)
所以我担心您将不得不为很多 KeyPress 事件进行大量代码编辑。我必须承认我有点为你感到难过。曾经处于类似的位置。
关于使用表单 KeyPreview 过滤 Enter 和 Escape 键的 David Heffernan 的建议。
不要!真的!别!为什么?
因为这样做可能会干扰其他一些组件的正常功能。
例如,将该代码与 ComboBox 组合使用会阻止您使用 Escape 键折叠展开的组合框。