Несовместимость горячих клавиш меню VCL-Styles - PullRequest
5 голосов
/ 02 апреля 2012

Я заметил, что когда включены VCL-стили, элементы в меню будут выбираться с помощью горячих клавиш даже без нажатия клавиши Alt .

Это мешает остальным моимпользовательский интерфейс, и я нахожу очень странным, что библиотека стилей меняет поведение горячих клавиш.

Можно ли как-то устранить это несоответствие?

Normal: Нажатие «A» не активирует главное меню (Alt + A делает).

Normal: Pressing

Styled: Нажатие «A» активирует главное меню, Примечание: нет клавиши Alt .

Styled: Pressing

Мой тестовый проект здесь на случай, если кто-нибудь захочет его опробовать.

1 Ответ

6 голосов
/ 02 апреля 2012

Эта проблема, похоже, связана с методом 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 Страница.

...