delphi – VCL-Styles菜单热键不一致
发布时间:2020-12-15 09:29:44 所属栏目:大数据 来源:网络整理
导读:我注意到,当启用VCL-Styles时,即使没有按下Alt键,也会使用热键选择菜单中的项目. 这会干扰我的其他用户界面,我发现样式库改变了热键的行为很奇怪. 我可以以某种方式消除这种不一致吗? 正常:按“A”不会激活主菜单(Alt A会). 样式:按“A”激活主菜单.注意
我注意到,当启用VCL-Styles时,即使没有按下Alt键,也会使用热键选择菜单中的项目.
这会干扰我的其他用户界面,我发现样式库改变了热键的行为很奇怪. 我可以以某种方式消除这种不一致吗? 正常:按“A”不会激活主菜单(Alt A会). 样式:按“A”激活主菜单.注意:没有Alt键. 我的测试项目是here,以防有人想尝试一下. 解决方法
这个问题似乎与处理消息CM_DIALOGCHAR的TFormStyleHook.CMDialogChar方法有关,原始方法不检查是否按下了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); 记得将此案件报告给Quality Central. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |