5

我注意到当启用 VCL-Styles 时,即使没有 Alt-key ispressed,菜单中的项目也会用热键选择。

这会干扰我的用户界面的其余部分,我发现样式库会改变热键的行为非常奇怪。

我可以以某种方式消除这种不一致吗?

正常:按“A”不会激活主菜单(Alt + A 会)。

正常:按下

样式:按“A”激活主菜单。注意:没有 Alt 键

风格:压制

我的测试项目在这里,以防有人想尝试。

4

1 回答 1

6

这个问题似乎与TFormStyleHook.CMDialogChar处理消息 CM_DIALOGCHAR 的方法有关,原始方法不检查是否Alt按下了键。

我写了这个风格钩子,它解决了这个问题。

type
  TFormStyleHookFix= class (TFormStyleHook)
  procedure CMDialogChar(var Message: TWMKey); message CM_DIALOGCHAR;
  end;

  TFormStyleHookHelper= class  helper for TFormStyleHook
  private
     function CheckHotKeyItem(ACharCode: Word): Boolean;
  end;



{ TFormStyleHookFix }

procedure TFormStyleHookFix.CMDialogChar(var Message: TWMKey);
begin
   if ((Message.KeyData and $20000000) <> 0 ) and (CheckHotKeyItem(Message.CharCode)) then
    begin
      Message.Result := 1;
      Handled := True;
    end
end;

{ TFormStyleHookHelper }
function TFormStyleHookHelper.CheckHotKeyItem(ACharCode: Word): Boolean;
begin
  Result:=False;
  if Self.FMainMenuBarHook<>nil then
   Result:=Self.FMainMenuBarHook.CheckHotKeyItem(ACharCode);
end;

以这种方式使用

 TStyleManager.Engine.RegisterStyleHook(TForm9, TFormStyleHookFix);

请记住将此案例报告给质量中心页面。

于 2012-04-02T15:16:30.100 回答