Vil*_*nde 5 delphi delphi-xe2 vcl-styles
我注意到,当启用VCL-Styles时,即使没有按下Alt键,也会使用热键选择菜单中的项目.
这会干扰我的其他用户界面,我发现样式库改变了热键的行为很奇怪.
我可以以某种方式消除这种不一致吗?
正常:按"A"不会激活主菜单(Alt + A会激活).

样式:按"A"激活主菜单.注意:没有Alt键.

我的测试项目在这里,以防任何人想要尝试它.
这个问题似乎与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;
Run Code Online (Sandbox Code Playgroud)
以这种方式使用
TStyleManager.Engine.RegisterStyleHook(TForm9, TFormStyleHookFix);
Run Code Online (Sandbox Code Playgroud)
Remeber将此案例报告给Quality Central Page.