![]() |
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 |
AW: BindingServices.AddMenuCommand
*leichter Druck von 1.2 bar*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz