Hinzufügen eines Eintrags zum Hauptmenü der IDE
Nach oben zu Die Hauptobjekte der IDE verwenden
Sie können mit dem nativen Tools-API-Interface INTAServices
das Hauptmenü der IDE um eigene Menüeinträgen erweitern.
Inhaltsverzeichnis
Hinzufügen eines Eintrags zum Hauptmenü
So fügen Sie dem Hauptmenü der IDE eine Instanz von TMenuItem hinzu:
- Erstellen Sie eine Instanz von
TMenuItem
mit dem Hauptmenü-Objekt als übergeordnetes Element. Das Hauptmenü-Objekt ist die EigenschaftMainMenu
der VariableBorlandIDEServices
, die in den TypINTAServices
umgewandelt wird. - Konfigurieren Sie Ihren Menüeintrag. Zum Beispiel:
- Legen Sie einige Eigenschaften, wie Name, Caption, Hint oder ShortCut, fest.
- Führen Sie einen der folgenden Schritte aus, um die Funktion Ihres Menüeintrags festzulegen:
- Um ein Symbol für Ihren Menüeintrag festzulegen, fügen Sie Ihr Symbol der Bilderliste der IDE hinzu, und weisen Sie dessen Index der Eigenschaft ImageIndex Ihres Menüeintrags zu.
- Rufen Sie
AddActionMenu
für die VariableBorlandIDEServices
auf, deren Typ inINTAServices
umgewandelt wurde, und stellen Sie die folgenden Parameter bereit:- Ein String mit dem Namen eines vorhandenen Menüeintrags des Hauptmenüs der IDE, z. B. "ToolsMenu" oder "HelpMenu".
- Dieser Parameter fügt die angegebene Aktion der Aktionsliste der IDE hinzu. Wenn Ihr Menüeintrag über eine Aktion verfügt, können Sie sie hier angeben, damit sie der Aktionsliste der IDE hinzugefügt wird. Geben Sie andernfalls einen nil-Wert an.
- Ihr Menüeintrags-Objekt.
Delphi:
if Supports(BorlandIDEServices, INTAServices, NTAServices) then
begin
MyMenuItem := TMenuItem.Create(nil);
MyMenuItem.Caption := 'My Menu Item';
NTAServices.AddActionMenu('ToolsMenu', nil, MyMenuItem);
end;
C++:
_di_INTAServices NTAServices;
if (BorlandIDEServices->Supports(NTAServices)) {
MyMenuItem = new TMenuItem(NULL);
MyMenuItem->Caption = "My Menu Item";
NTAServices->AddActionMenu("ToolsMenu", NULL, MyMenuItem);
}
AddActionMenu
fügt Ihren Menüeintrag nach dem vorhandenen Menüeintrag mit dem angegebenen Namen hinzu. Sie können Ihr Menü auch an einer anderen Position platzieren. Diese Position kann relativ zu dem angegebenen vorhandenen Menüeintrag sein, entweder links neben dem Menüeintrag oder als untergeordnetes Element des Menüeintrags.
Sie müssen auch daran denken, Ihr Menüeintrags-Objekt beim Entladen Ihres Package freizugeben.
Ermitteln des Namens eines vorhandenen Hauptmenüeintrags
Um dem Hauptmenü der IDE einen Menüeintrag hinzuzufügen, müssen Sie den Namen eines vorhandenen Menüeintrags kennen.
Zum Ermitteln des Namens eines vorhandenen Hauptmenüeintrags können Sie die folgende Prozedur in Ihr Package implementieren:
Delphi:
type
TMenuBreadcrumbs = array of String;
procedure FindMenuItem(AMenuBreadcrumbs: TMenuBreadcrumbs);
procedure IterateMenuItems(MenuItems: TMenuItem);
var
I, J: Integer;
ArrayLength: Cardinal;
Caption: String;
begin
for I := 0 To MenuItems.Count - 1 do
begin
Caption := StringReplace(MenuItems[I].Caption, '&', '', []);
if Uppercase(AMenuBreadcrumbs[0]) = Uppercase(Caption) then
begin
ArrayLength := Length(AMenuBreadcrumbs);
if ArrayLength = 1 then
ShowMessage(MenuItems[I].Name)
else
begin
for J := 1 to ArrayLength - 1 do
AMenuBreadcrumbs[J - 1] := AMenuBreadcrumbs[J];
SetLength(AMenuBreadcrumbs, ArrayLength - 1);
IterateMenuItems(MenuItems.Items[I]);
end;
break;
end;
end;
end;
var
NTAServices: INTAServices;
begin
if Supports(BorlandIDEServices, INTAServices, NTAServices) then
IterateMenuItems(NTAServices.MainMenu.Items);
end;
C++:
void IterateMenuItems(TMenuItem* MenuItems,
DynamicArray<UnicodeString> &AMenuBreadcrumbs) {
for (int i = 0; i < MenuItems->Count; i++) {
UnicodeString Caption = StringReplace(
MenuItems->Items[i]->Caption, "&", "", TReplaceFlags());
if (AMenuBreadcrumbs[0].UpperCase() == Caption.UpperCase()) {
int ArrayLength = AMenuBreadcrumbs.Length;
if (ArrayLength == 1)
ShowMessage(MenuItems->Items[i]->Name);
else {
for (int j = 1; j < ArrayLength; j++)
AMenuBreadcrumbs[j - 1] = AMenuBreadcrumbs[j];
AMenuBreadcrumbs.Length = ArrayLength - 1;
IterateMenuItems(MenuItems->Items[i], AMenuBreadcrumbs);
}
break;
}
}
}
void FindMenuItems(DynamicArray<UnicodeString> AMenuBreadcrumbs) {
_di_INTAServices NTAServices;
if (BorlandIDEServices->Supports(NTAServices)) {
IterateMenuItems(NTAServices->MainMenu->Items, AMenuBreadcrumbs);
}
}
Rufen Sie dann FindMenuItem
im initialization-Abschnitt Ihres Package auf, und übergeben Sie es an ein Array mit den Titeln, um den gewünschten Menüeintrag zu ermitteln.
Um beispielsweise den Namen des Menüeintrags File > Open From Version Control... zu ermitteln, rufen Sie FindMenuItem
wie folgt auf:
Delphi:
FindMenuItem(['File', 'Open From Version Control...']);
C++:
FindMenuItems(DynamicArray<UnicodeString>(
"File", "Open From Version Control..."););
Wenn Sie ein Package mit diesem Aufruf in der IDE installieren, wird in einem Dialogfeld der Name des angegebenen Menüs, z. B: "OpenFromRepository1", angezeigt.
Sie sollten diese Funktion nur bei der Entwicklung Ihrer IDE-Erweiterung verwenden, um bestimmte Namen von Menüeinträgen zu ermitteln. Da Ihre Benutzer die IDE möglicherweise in einer anderen Sprache als Englisch ausführen, sollte Ihr endgültiges Package diese Funktion nicht verwenden, sondern den tatsächlichen Namen des bei der Entwicklung ermittelten Zielmenüeintrags angeben:
Delphi:
NTAServices.AddActionMenu('OpenFromRepository1', nil, MyMenuItem);
C++:
NTAServices->AddActionMenu("OpenFromRepository1", NULL, MyMenuItem);
Festlegen einer anderen relativen Position für Ihren Menüeintrag
Standardmäßig fügt AddActionMenu
Ihren Menüeintrag rechts neben dem vorhandenen Menüeintrag hinzu, aber Sie können dieses Verhalten mit optionalen Parameter ändern.
Um Ihren Menüeintrag links neben dem angegebenen vorhandenen Menüeintrag einzufügen, übergeben Sie als vierten Parameter False
:
Delphi:
NTAServices.AddActionMenu('OpenFromRepository1', nil, MyMenuItem, False);
C++:
NTAServices->AddActionMenu("OpenFromRepository1", NULL, MyMenuItem, false);
Um Ihren Menüeintrag im angegebenen vorhandenen Menüeintrag als untergeordneten Eintrag einzufügen, übergeben Sie als fünften Parameter True
(der Wert des vierten Parameter ist unerheblich):
Delphi:
NTAServices.AddActionMenu('OpenFromRepository1', nil, MyMenuItem, False, True);
C++:
NTAServices->AddActionMenu("OpenFromRepository1", NULL, MyMenuItem, false, true);
Siehe auch
- Third-Party Help Menu Item (Delphi) (Codebeispiel)
- Third-Party Help Menu Item (C++) (Codebeispiel)