2012-04-02 7 views
4

Ich habe festgestellt, dass wenn VCL-Stile aktiviert ist, Elemente im Menü mit Hotkeys ausgewählt werden, auch ohne Alt-Taste gedrückt wird.VCL-Stile Menü Hotkey Inkonsistenz

Dies stört den Rest meiner Benutzeroberfläche und ich finde es sehr seltsam, dass eine Styles-Bibliothek das Verhalten von Hotkeys ändern.

Kann ich diese Inkonsistenz irgendwie entfernen?

Normal: Drücken von "A" aktiviert nicht das Hauptmenü (Alt + A).

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

Styled: Durch Drücken von "A" aktiviert das Hauptmenü. Hinweis: keine Alt-Taste.

Styled: Pressing "A" activates the main menu.

Mein Testprojekt ist here falls jemand will, um es auszuprobieren.

Antwort

6

Dieses Problem es das TFormStyleHook.CMDialogChar Verfahren im Zusammenhang scheint die die Nachricht CM_DIALOGCHAR, die ursprüngliche Methode behandeln nicht, wenn der Schlüssel Alt gedrückt wird überprüft.

Ich schrieb diesen Style-Hook, der das Problem behebt.

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; 

Verwendung auf diese Weise

TStyleManager.Engine.RegisterStyleHook(TForm9, TFormStyleHookFix); 

Remeber Bericht in diesem Fall an die Quality Central Seite.

+0

+1. Rodrigo hat wieder Style! :) –

+1

+1 Und noch einmal VCL Stile hat Bugs. Die Qualität dieses Teils der VCL ist ziemlich düster. –

+0

Vereinbarte David. Aber wir müssen zentrale Qualitätsprobleme posten oder es wird nicht besser! –