2012-04-02 6 views
4

VCLスタイルを有効にすると、メニュー内の項目がホットキーで選択されます。Altキーを押さなくても、が押されました。VCLスタイルメニューのホットキーの不一致

これは残りのユーザーインターフェイスを妨げ、スタイルライブラリがホットキーの動作を変更することが非常に奇妙に感じられます。

どういうわけかこの不一致を削除できますか?

ノーマル:「A」を押すと、メインメニューがアクティブになりません(Alt + Aが機能します)。

Normal: Pressing "A" does not activate the main menu (Alt + A does).

スタイル付き: "" メインメニューをアクティブに押します。 注:Altキーを使用しないでください

Styled: Pressing "A" activates the main menu.

私のテストプロジェクトは、誰もがそれを試してみたい場合にはhereあります。

答えて

6

この問題は、メッセージのCM_DIALOGCHARを扱うTFormStyleHook.CMDialogChar方法に関連すると思われるキーAltキーが押された場合、元のメソッドがチェックされていません。

私はこのスタイルのフックを書いて、問題を解決しました。 Quality Centralページにこのケースを報告覚え、このよう

TStyleManager.Engine.RegisterStyleHook(TForm9, TFormStyleHookFix); 

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; 

使用。

+0

+1。再びロドリゴにはスタイルがあります! :) –

+1

+1もう一度VCLスタイルにバグがあります。 VCLのこの部分の品質はかなり悲惨です。 –

+0

Davidに合意しました。しかし、我々は質の高いセントラルバグを投稿しなければなりません、それともそれ以上にはうまくいかないでしょう! –