Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   BindingServices.AddMenuCommand (https://www.delphipraxis.net/203973-bindingservices-addmenucommand.html)

stahli 11. Apr 2020 21:35

BindingServices.AddMenuCommand
 
Hallo zusammen,

ich habe einen IDE-Experten erstellt, der ein Untermenü unter dem Tools-Menüeintrag erstellt und über Shortcuts einige Funktionen aufrufen kann.

Jetzt möchte ich eine solche Funktion auch über einen Menüklick aufrufen, was mir nicht gelingt.

Kann mir jemand helfen?


So ist der Stand:

Die erste Unit wird bei der Installation zuerst ausgeführt (siehe unten im Codesite-Report).
Dort wird das Untermenü generiert.

Danach werden die Bindings innerhalb der zweiten Unit ausgeführt (diese werden übrigens auch bei jedem Shortcut ausgeführt, was aber vermutlich egal ist).
Die Shortcuts funktionieren, nicht aber der Menüklick.

Ich bin davon ausgegangen, dass die Verknüpfung zwischen dem MenueItem.Name und der Funbktion hier erfolgen müsste:
BindingServices.AddMenuCommand(mcUOOptimize, Optimize, nil);
Das ist aber offenbar falsch oder nicht ausreichend.

Über Shortcut wird die Funktion korrekt aufgerufen.

Delphi-Quellcode:
===================================================================================================

  const

    mcUOOptimize = 'UnitOptimizer_Optimize';

...

  procedure Initialize(Sender: TObject);
  begin
    if Supports(BorlandIDEServices, INTAServices, NTAServices) then
      begin
//      aMethodContainer := TMethodContainer.Create;

        StahliSoft_MenuItem := TMenuItem.Create(nil);
        StahliSoft_MenuItem.Name := 'StahliSoftMenuItem';
        StahliSoft_MenuItem.Caption := 'UnitOptimizer (StahliSoft)';
        NTAServices.AddActionMenu('ToolsMenu', nil, StahliSoft_MenuItem, False, True);

        StahliSoft_UnitOptimizer_Optimize_MenuItem := TMenuItem.Create(nil); // <---------- aufrufender Menüeintrag
        StahliSoft_UnitOptimizer_Optimize_MenuItem.Name := mcUOOptimize; // <--- ID
        StahliSoft_UnitOptimizer_Optimize_MenuItem.Caption := 'Optimize';
//      StahliSoft_UnitOptimizer_Optimize_MenuItem.OnClick := aMethodContainer.UnitOptimizer_Optimize_Click;
        StahliSoft_UnitOptimizer_Optimize_MenuItem.ShortCut := ShortCut(Word('O'), [ssCtrl, ssShift]);
        NTAServices.AddActionMenu(StahliSoft_MenuItem.Name, nil, StahliSoft_UnitOptimizer_Optimize_MenuItem, True,     
          True); // <--- Erzeugen des Menüeintrages

        Codesite.Send(TimeToStr(Now) + ' AddActionMenu'); // <--- erster Eintrag
        Sleep(2000);
      end;
  end;

===================================================================================================

    TOptimizeBinding = class(TNotifierObject, IOTAKeyboardBinding)
    protected
      procedure GetBookmarks(const aSL: TStringList; const aEditView: IOTAEditView);
      procedure GetBreakpoints(const aSL: TStringList; const aBreakPointList: TList<IOTASourceBreakpoint>; const       
        aUnitFileName: String);
      procedure GetCursorPos(const aSL: TStringList; const aEditView: IOTAEditView);
      procedure RestoreBookmarks(const BookmarkPosList: TList<TBookmarkPos>; const aEditView: IOTAEditView);
      procedure RestoreBreakpoints(const BreakpointPosList: TList<TBreakpointPos>);
      procedure RestoreCursorPos(var aEditPos: TOTAEditPos; var aEditView: IOTAEditView);
      procedure ScanBookmarks(const BookmarkPosList: TList<TBookmarkPos>);
      procedure ScanBreakpoints(const aBreakPointList: TList<IOTASourceBreakpoint>; const BreakpointPosList:           
        TList<TBreakpointPos>);
      procedure ScanCursorPos(var aEditPos: TOTAEditPos);
      procedure Work(const aSL, aResultSL: TStringList);
    public
      function GetBindingType: TBindingType;
      function GetDisplayName: string;
      function GetName: string;
      procedure BindKeyboard(const BindingServices: IOTAKeyBindingServices);
      procedure Optimize(const Context: IOTAKeyContext; KeyCode: TShortcut; var BindingResult: TKeyBindingResult);
      procedure OptimizeCleanUpCode(const Context: IOTAKeyContext; KeyCode: TShortcut; var BindingResult:              
        TKeyBindingResult);
      procedure Optimize_RemoveOutCommentedCode(const Context: IOTAKeyContext; KeyCode: TShortcut; var BindingResult:  
        TKeyBindingResult);
    end;

  procedure TOptimizeBinding.BindKeyboard(const BindingServices: IOTAKeyBindingServices);
  begin
    BindingServices.AddKeyBinding([Shortcut(Ord('O'), [ssShift, ssCtrl])], Optimize, nil); // <------ funktionierende Shortcut-Registrierung
    BindingServices.AddKeyBinding([Shortcut(Ord('D'), [ssCtrl])], Optimize, nil);
    BindingServices.AddMenuCommand(mcUOOptimize, Optimize, nil); // <============================== DAS BZW KLICK AUF MENÜEINTRAG HAT KEINE AUSWIRKUNG
    BindingServices.AddKeyBinding([Shortcut(Ord('O'), [ssAlt, ssShift, ssCtrl])], OptimizeCleanUpCode, nil);
    BindingServices.AddKeyBinding([Shortcut(Ord('O'), [ssAlt, ssCtrl])], Optimize_RemoveOutCommentedCode, nil);

    Codesite.Send(TimeToStr(Now) + ' BindKeyboard'); // <--- zweiter Eintrag
    Sleep(2000);
  end;

===================================================================================================

22:06:37 AddActionMenu
22:06:39 BindKeyboard

stahli 14. Apr 2020 15:38

AW: BindingServices.AddMenuCommand
 
*leichter Druck von 1.2 bar*


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz