AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BindingServices.AddMenuCommand

Ein Thema von stahli · begonnen am 11. Apr 2020 · letzter Beitrag vom 14. Apr 2020
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#1

BindingServices.AddMenuCommand

  Alt 11. Apr 2020, 21:35
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
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: BindingServices.AddMenuCommand

  Alt 14. Apr 2020, 15:38
*leichter Druck von 1.2 bar*
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 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