Delphi Alt键+加速键发出“错误输入”声音

时间:2015-03-21 22:02:06

标签: delphi delphi-xe

我编写了一个从tExCustomControl派生的自定义buttonn,而后者又来自tCustomControl。 tExCustomControl组件负责绘制并具有内部tLabel用于标题显示(我的选项是tLabel用于促进加速器char的底层)。在tExCustomControl中,我处理" keyUp"像这样的事件:

      if Char (Key) = AcceleratorChar then
          if AltKeyIsDown then
              if Assigned (OnClick) then
                 OnClick (Self);

这样做很好,除了一件事:按住Alt键并按下并重新加载加速键后,我得到一个错误的条目"声音。

为什么会播放此声音?我怎么能避免这个?

提前致谢。

2 个答案:

答案 0 :(得分:2)

当按下Alt键同时按下另一个键时,系统会生成WM_SYSKEYDOWN,然后WM_SYSCHAR功能将其翻译为TranslateMessage。 “哔”是由此消息的默认处理引起的,该消息通常仅用于系统菜单加速器。

您可以阻止进一步处理消息以防止发出哔声。当你在那里时,你也可以处理密钥。

procedure tMyExCustomControl.WMSysChar(var Message: TWMSysChar);
begin
  if Message.CharCode = Ord(AcceleratorChar) then
    OnClick(Self)
  else
    inherited;
end;

答案 1 :(得分:0)

问题在于tLabel充当标题。它接收消息但是,由于没有设置焦点控制,Windows发出声音。将焦点控制设置为tExButton可以解决问题。事实上,ding是在表单级别播放的,因此,在tExCustomControl中的KeyUp事件之前。这就是为什么tExCustomControl没有要处理的消息的原因,它们已经由表单处理过了。