5

VCL-Styles を有効にすると、 Alt キーを押さなくても、メニューの項目がホットキーで選択されることに気付きました。

これは私のユーザー インターフェイスの残りの部分に干渉し、スタイル ライブラリがホットキーの動作を変更するのは非常に奇妙です。

どうにかしてこの矛盾を取り除くことはできますか?

通常: "A" を押してもメイン メニューはアクティブになりません (Alt + A でアクティブになります)。

ノーマル:押す

Styled: 「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);

このケースは必ずQuality Centralページに報告してください。

于 2012-04-02T15:16:30.100 に答える