在输入时抑制成功的蜂鸣声,但留下错误的蜂鸣声

时间:2015-03-23 15:20:25

标签: windows delphi beep

我有一个相当大的程序,我需要一种方法来抑制按Enter键时出现的所有Windows哔声。我发现了一个允许我抑制所有蜂鸣声的功能,但我需要在出现问题时触发错误声音,因此这不是一个选项。我看到你可以通过将Key设置为0来抑制单个文本框的声音,但这不是一个选项,因为我的程序中有很多按键事件。

2 个答案:

答案 0 :(得分:3)

您可以抑制编辑控件具有焦点时产生的这些哔声,并通过将TForm.KeyPreview设置为{{1}来按 ESCAPE ENTER 然后为表单添加以下True事件处理程序:

OnKeyPress

如果您有一些控件要接受 ENTER ESCAPE ,例如多行编辑控件,那么您可以将procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) or (Key=#27) then Key := #0; end; 保留为KeyPreview,并为每个单行编辑控件处理False

OnKeyPress

或者您可以将procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) or (Key=#27) then Key := #0; end; 保留为KeyPreview,然后拥有一个表单范围的True处理程序,该处理程序根据具有焦点的控件进行区分。例如,一个相当粗略的例子:

OnKeyPress

但是,我建议你不要做这些事情。我建议你保留现在的行为。如果形式和聚焦控制都没有响应这些按键,那么嘟嘟声是最恰当的反应。当用户想要取消当前对话框时,按 ESCAPE 。如果你不打算回复,那么系统会发出嘟嘟声以表明这一点。同样,当用户想要接受当前对话框时,按 ENTER 。同样,由于您的对话框没有响应,因此发出哔声是合适的。

答案 1 :(得分:0)

  

我看到你可以通过将Key设置为0来抑制单个文本框的声音,但这不是一个选项,因为我的程序中有很多按键事件。这有什么解决方案吗?

这实际上是执行此操作的正确方法,前提是特定的EditBox在按Enter键时确实有正确的代码来执行某些操作。

如果您在某些字段中没有任何特定代码来处理按Enter键的某些操作,则应听到Ding声音告诉用户他做错了。

如果您将特定的EditBoxes限制为仅限数字,则会发生同样的情况。因此,每当用户按下任何字母键时,播放丁音并且用户知道不允许字母。其他用户可能认为他的键盘有问题。

你不会想成为一个制作软件的人,其使用导致许多键盘被破坏。或者你呢? : - )

所以我担心你需要为很多KeyPress事件做很多代码编辑。我必须承认,我有点为你感到难过。曾经处于类似的位置。

关于David Heffernan关于使用表单KeyPreview过滤Enter和Escape键的建议。

不要!真的!别!为什么?

通过这样做,您可以与其他一些组件的正常功能互相干扰。

例如,使用ComboBox组合的代码可以防止您使用Escape键来折叠展开的组合框。