德尔福Alt键+加速键播放"wrong entry"声音



我正在编写一个从tExCustomControl派生的自定义按钮,而该按钮又是从tCustomControl派生的。tExCustomControl组件负责绘画,并有一个用于标题显示的内部tLabel(我选择tLabel是为了方便快捷键字符的底层)。在tExCustomControl中,我处理"keyUp"事件,如下所示:

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

这很好,除了一件事:在按住Alt键的同时,在按下并重新松开加速键后,我会听到"输入错误"的声音。

为什么播放这个声音?我该如何避免这种情况?

提前谢谢。

当按下Alt键同时按下另一个键时,系统会生成一个WM_SYSKEYDOWN,然后通过TranslateMessage函数将其转换为WM_SYSCHAR。"嘟嘟"是由该消息的默认处理引起的,该消息通常仅用于系统菜单快捷键。

您可以阻止对消息的进一步处理,以防止嘟嘟声。当你在那里的时候,你也可以处理钥匙。

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

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

最新更新