Anpassen von Kontextmenüs in Office 2010

Zusammenfassung: Entwickler benötigen häufig eine Möglichkeit, Kontextmenüs auf der Microsoft Office Fluent-Benutzeroberfläche anzupassen. Erfahren Sie mehr darüber, wie Sie Kontextmenüs anpassen können, und sehen Sie anhand eines Beispiels, wie ein vorhandenes Kontextmenü in Microsoft Word 2010 aktualisiert wird.

Letzte Änderung: Freitag, 24. April 2015

Gilt für: Excel 2010 | Office 2007 | Office 2010 | Open XML | PowerPoint 2010 | SharePoint Server 2010 | VBA | Word 2010

Microsoft-Symbol Frank Rice, Microsoft Corporation

November 2009

Betrifft: Microsoft Office 2010

Inhalt

  • Einführung in benutzerdefinierte Kontextmenüs in Office 2010

  • Möglichkeiten und Einschränkungen der Anpassung von Kontextmenüs

  • Beispiel für das Anpassen eines Kontextmenüs

  • Fazit

  • Zusätzliche Ressourcen

Einführung in benutzerdefinierte Kontextmenüs in Office 2010

Vor Microsoft Office 2010 gab es nur eine Möglichkeit, Kontextmenüs (Rechtsklickmenüs) auf der Menüband-Benutzeroberfläche von Microsoft Office Fluent anzupassen: die Verwendung von CommandBars-Lösungen. In Office 2010 können Sie integrierte Kontextmenüs genauso anpassen wie die anderen Komponenten der Menüband-Benutzeroberfläche. Dieses XML-basierte Erweiterungsmodell für Kontextmenüs basiert auf dem vertrauten Menüband-Erweiterungsmodell. Das bedeutet, dass Sie dasselbe XML-Markup und dieselben Rückrufe verwenden können, mit denen Sie derzeit die Menüband-Benutzeroberfläche anpassen. Außerdem werden durch die Anpassung von Kontextmenüs im Rahmen der Erweiterung der Menüband-Benutzeroberfläche die zuvor geschriebenen Befehlsleistenlösungen nicht beschädigt. Wie bei den bekannten Erweiterungsszenarien für die Menüband-Benutzeroberfläche ist es auch bei Kontextmenüs möglich, sie durch Aktualisieren von Dateien im Office Open XML-Format oder mithilfe von in Microsoft Visual Studio erstellten Add-Ins anzupassen.

Hinweis

Weitere Informationen zum Anpassen der Menüband-Benutzeroberfläche finden Sie in der dreiteiligen Artikelreihe, die mit dem Artikel Anpassen der Menüband-Benutzeroberfläche von Office (2007) für Entwickler - Teil 1 beginnt.

Möglichkeiten und Einschränkungen der Anpassung von Kontextmenüs

Die Anpassung von Kontextmenüs mithilfe der Menüband-Erweiterung bietet zahlreiche Optionen. Unter anderem stehen die folgenden Funktionen zur Verfügung:

  • Sie können integrierte und benutzerdefinierte Steuerelemente (die derzeit vom Menüband-Menüsteuerelement unterstützt werden) folgendermaßen zu integrierten Kontextmenüs hinzufügen:

    • Hinzufügen von Steuerelementen an einer beliebigen Position im Menü

    • Hinzufügen von Steuerelementen zu einem beliebigen Untermenü

    • Hinzufügen von benutzerdefinierten Untermenüs zu integrierten Kontextmenüs

  • Ausblenden von Steuerelementen in integrierten Menüs

  • Hinzufügen von Menütrennlinien vor oder hinter einem Kontextmenüelement

  • Dynamisches Auffüllen (bei erweitertem Untermenü) von benutzerdefinierten Untermenüs mithilfe des dynamicMenu-Steuerelements

  • Dynamisches Auffüllen benutzerdefinierter Kataloge, die im Kontextmenü angezeigt werden

Die folgenden Optionen sind beim Anpassen des Kontextmenüs nicht verfügbar:

  • Hinzufügen von Steuerelementtypen, die derzeit von Kontextmenüs nicht unterstützt werden (z. B. Kombinations- und Eingabefelder). Hierauf wird weiter hinten in diesem Artikel eingegangen.

  • Zuweisen neuer Steuerelementbeschriftungen und -symbole für integrierte Kontextmenü-Steuerelemente

  • Ändern der Reihenfolge von Steuerelementen innerhalb von integrierten Kontextmenüs und Untermenüs

  • Dynamisches Auffüllen von integrierten Kontextmenüs

Beispiel für das Anpassen eines Kontextmenüs

Zum Anpassen von Kontextmenüs verwenden Sie im Wesentlichen dieselben Befehle und Steuerelemente wie zum Anpassen der Menüband-Benutzeroberfläche. Nachfolgend werden die in Kontextmenüs zulässigen Steuerelemente aufgeführt:

  • control

  • button

  • checkBox

  • dynamicMenu

  • gallery

  • menu

  • menuSeparator

  • splitButton

  • toggleButton

Sehen Sie sich das folgende Beispiel an, in dem die Funktionsweise der Kontextmenüerweiterung dargestellt ist. Das Beispiel ändert das Kontextmenü Text in Microsoft Word 2010 und führt die folgenden Aktionen aus:

  • Ausblenden der integrierten Schaltfläche Font

  • Hinzufügen einer Umschaltfläche

  • Einfügen einer neuen Schaltfläche vor der Schaltfläche Hyperlink

  • Einfügen einer Trennlinie

  • Hinzufügen eines Menüs mit einer Schaltfläche

  • Hinzufügen eines Katalogsteuerelements

  • Hinzufügen eines dynamischen Menüs (das zur Laufzeit erzeugt wird) mit einer Schaltfläche und einem Untermenü

Im folgenden Beispiel fügen Sie das XML-Markup hinzu, mit dem das Kontextmenü Text in Word 2010 angepasst wird. Sie können den XML-Code für die Anpassung ganz einfach mithilfe des Custom UI Editors für Office 14 zum Dokument hinzufügen. Beachten Sie aber, dass dieses Markup auch für COM-Add-Ins funktioniert. Der Custom UI Editor ist ein kostenloses Tool, das Trang Luu vom Microsoft Office User Experience-Team entwickelt hat und das unter OPENXMLDeveloper.org zum Download zur Verfügung steht. Verwenden Sie dieses Tool für die folgenden Schritte.

Hinzufügen von XML-Markup zum Word 2010-Dokument

  1. Starten Sie Word 2010.

  2. Fügen Sie dem Dokument Text hinzu. Geben Sie im Dokumentkörper =rand(5, 5) ein. Mit dieser Anweisung werden dem Dokument fünf Absätze mit jeweils fünf zufälligen Textzeilen hinzugefügt.

  3. Speichern Sie das Dokument als Datei mit Makros unter dem Namen TestDocument.docm, und schließen Sie sie.

  4. Starten Sie den Custom UI Editor für Office 2010, und klicken Sie im Menü File auf Open.

  5. Navigieren Sie zum zuvor erstellten Testdokument, und klicken Sie dann auf Open.

  6. Klicken Sie mit der rechten Maustaste im linken Fensterbereich auf den Dateinamen, und klicken Sie dann auf Insert Office 2010 Custom UI Part (siehe Abbildung 1). Daraufhin wird dem Dokument das Teil customUI14.xml hinzugefügt.

    Abbildung 1. Einfügen eines Office 2010-Teils in das Dokument mit dem Custom UI Editor

    Verwenden des benutzerdefinierten Benutzeroberflächen-Editors

  7. Fügen Sie im rechten Fensterbereich das folgende XML-Markup ein:

    <customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui">
       <contextMenus>
          <contextMenu idMso="ContextMenuText">
             <button idMso="FontDialog" visible="false" />
             <toggleButton id="MyToggle" label="My Toggle Button" />
             <button id="MyButton" label="My Button" insertBeforeMso="HyperlinkInsert" onAction="GetButtonID" />
             <menuSeparator id="MySeparator" />
             <menu id="MySubMenu" label="My Submenu" >
                <button id="MyButton2" label="Button on submenu" />
             </menu>
             <gallery id="galleryOne" label="My Gallery">
                <item id="item1" imageMso="HappyFace" />
                <item id="item2" imageMso="HappyFace" />
                <item id="item3" imageMso="HappyFace" />
                <item id="item4" imageMso="HappyFace" />
             </gallery>
             <dynamicMenu id="MyDynamicMenu" label= "My Dynamic Menu" getContent="GetMyContent" />
          </contextMenu>
       </contextMenus>
    </customUI>
    
  8. Durch den XML-Code werden dem integrierten Kontextmenü Text Steuerelemente gemäß der idMso="ContextMenuText"-Attributeinstellung des <contextMenu>-Tags hinzugefügt. Diese erste Schaltfläche legt das visible-Attribut der integrierten Schaltfläche Font auf false fest, wodurch der Befehl ausgeblendet wird. Fügen Sie nach dem toggleButton-Element die zweite Schaltfläche vor der Schaltfläche Hyperlink im Kontextmenü gemäß insertBeforeMso="HyperlinkInsert"-Einstellung ein. Fügen Sie nach der menuSeparator-Leiste ein Menüsteuerelement mit einer einzelnen Schaltfläche hinzu. Fügen Sie als Nächstes ein Katalogsteuerelement mit vier Elementen hinzu. Abschließend, wenn das Kontextmenü angezeigt wird, ruft das dynamicMenu-Steuerelement die im getContent-Attribut angegebene Methode auf. Sie werden sehen, dass diese Methode zur Laufzeit zusätzliche Steuerelemente im Flyoutmenü zurückgibt.

  9. Klicken Sie im Custom UI Editor auf die Schaltfläche Validate, um sicherzustellen, dass das Markup keine Fehler enthält. Korrigieren Sie eventuell vorhandene Fehler, bis das Markup fehlerfrei ist und in einer Meldung bestätigt wird, dass es wohlgeformt ist.

  10. Speichern Sie die Datei, und schließen Sie den Editor.

  11. Fügen Sie den folgenden VBA-Code in den Codebereich ein.

        Sub GetButtonID(control As IRibbonControl)
            MsgBox ("You click the " & control.ID & " button.")
        End Sub
        Sub btnAction(control As IRibbonControl)
           MsgBox ("You clicked me!")
        End Sub
    

    Zum Aufrufen dieser Methoden verwenden Sie zwei Schaltflächen im Kontextmenü. In jeder Methode wird ein IRibbonControl-Objektargument für das Steuerelement übergeben, von dem die Prozedur aufgerufen wurde. Das IRibbonControl-Objekt verfügt über eine Id-Eigenschaft, die in der GetButtonID-Methode verwendet wird, um festzustellen, von welcher Schaltfläche die Prozedur aufgerufen wurde. Die Id-Eigenschaft ist nützlich, weil sie es mehreren Steuerelementen ermöglicht, dieselbe Methode aufzurufen und dann anhand der Steuerelement-ID unterschiedliche Aufgaben auszuführen.

Fügen Sie als Nächstes VBA-Code (Microsoft Visual Basic für Applikationen) hinzu, um die soeben hinzugefügten Steuerelemente mit einer Funktion zu versehen.

Hinzufügen von VBA-Code zum Dokument

  1. Öffnen Sie die Datei TestDocument.docm, die Sie in einem der vorherigen Schritte erstellt haben.

  2. Klicken Sie auf die Registerkarte Entwickler und dann auf Visual Basic. Dadurch öffnen Sie den Visual Basic-Editor.

  3. Doppelklicken Sie im linken Bereich auf den Knoten ThisDocument. Daraufhin wird der Codebereich angezeigt.

  4. Fügen Sie im Codebereich die folgende Methode hinzu.

    Sub GetMyContent(control As IRibbonControl, ByRef content)
    Dim xmlString As String
    xmlString = "<menu xmlns=""" & _
      "https://schemas.microsoft.com/office/2009/07/customui"">"
    xmlString = xmlString & "<button id=""btn1"" imageMso=""HappyFace"" " & _
    " label=""Click Me"" onAction=""btnAction"" />"
    xmlString = xmlString & "<menu id=""mnu"" label=""My Dynamic Menu"" > " & _
    "<button id=""btn2"" imageMso=""RecurrenceEdit"" /> " & _
    "<button id=""btn3"" imageMso=""CreateReportFromWizard"" /> " & _
    "</menu>"
    content = xmlString & "</menu>"
    
    End Sub
    

    Diese Methode wird vom dynamicMenu-Steuerelement aus dem getContent-Attribut aufgerufen, wenn das Kontextmenü angezeigt wird. Sie soll XML-Markup zurückgeben, um ein Menü zu erstellen. Das Markup wird wie hart in das ursprüngliche XML-Markup codiertes Markup implementiert.

    Sehen Sie sich den VBA-Code an: Sie sehen, dass Sie das bereits beschriebene IRibbonControl-Objekt übergeben. Darüber hinaus übergeben Sie der Methode ein content-Argument. Für dieses Argument wird kein Typ angegeben, sodass standardmäßig ein Variant-Typ verwendet wird. Diese Variable enthält das XML, das bei Abschluss der Methode an Microsoft Office zurückgegeben wird. Die XML-Zeichenfolge enthält ein Menüsteuerelement und muss mit dem spezifischen Namespace beginnen. Jedes dynamische Menü muss diese Zeile enthalten. Der übrige Code dient zum Erstellen einer Zeichenfolge mit den Steuerelementen für das Menü – in diesem Fall also drei Schaltflächen. Schließlich wird die konstruierte Zeichenfolge der content-Variablen zugewiesen, die sie zur Anzeige an Office 2010 zurückgibt.

  5. Schließen Sie den Visual Basic-Editor.

  6. Markieren Sie einen Textabschnitt, und klicken Sie dann mit der rechten Maustaste, um das angepasste Kontextmenü anzuzeigen.

Zum Vergleich sehen Sie in Abbildung 2 das standardmäßige Kontextmenü Text vor der Anpassung.

Abbildung 2. Das Standardkontextmenü 'Text'

Das Standardkontextmenü 'Text'

Abbildung 3 zeigt das angepasste Kontextmenü "Text", das Sie erstellt haben.

Abbildung 3. Das angepasste Kontextmenü 'Text'

Benutzerdefiniertes Kontextmenü 'Text'

Fazit

Entwickler passen traditionell das Kontextmenü an, um kontextbezogene, benutzerdefinierte Lösungen mit äußerst effizienter Mausbedienung bereitzustellen. Das Anpassen mit dem Menüband-Erweiterungsmodell ist deutlich einfacher als die Verwendung von Befehlsleisten. Experimentieren Sie mit den verschiedenen Steuerelementkombinationen, um spezifische Benutzeroberflächen für Ihre Office 2010-Lösungen zu erstellen.

Zusätzliche Ressourcen

Weitere Informationen zu den in diesem Artikel besprochenen Themen finden Sie in den folgenden Ressourcen.

Danksagung: Ich danke meiner Lektorin Linda Cannon für ihre Hilfe bei der Vorbereitung dieses Artikels für die Veröffentlichung.