Эта проблема, похоже, связана с методом 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);
Помните, сообщите об этом случае на Quality Central Страница.