Staatliche Fachschule für
Lebensmitteltechnik
Kulmbach
E.C.-Baumann-Str. 2295326 Kulmbach
info:@:lemitec.de
Workshop: Ribbon UI

Die Multifunktionsleiste, das Ribbon User Interface, hat Einzug in Office 2007 gehalten. Kaum hat man damit gearbeitet stellt sich die Frage, wie kann man das Ribbonkonzept anpassen. VBA ist zur Programmierung der Benutzeroberfläche, der Steuerelemente und Symbol-Schaltflächen nicht notwendig, nicht vorgesehen – sondern es kommt XML, eXtensible Markup Language zum Einsatz. So weit die schlechte Nachricht. Die gute Nachricht: XML ist eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten in Form von Textdateien. Die Multifunktionsleiste, die ganze Benutzeroberfläche von Office wird durch eine Textdatei beschrieben. Ohne auf die Details der Implementierung ein zu gehen, verweise ich auf die zahlreichen Fundstellen auf dem MSDN-Server von Microsoft. Aus diesem Angebot lädt man zumindest den Office 2007 Custom UI Editor (dieser Suchbegriff für Google liefert eine Vielzahl von interessanten Fundstellen) und die Excel-Dateien, Office2007IconsGallery.EXE und 2007OfficeControlIDs¬Excel2007.EXE.
Betrachten Sie den Programmfensteraufbau von PowerPoint 2007 etwas näher:

- Multifunktionsleiste (Ribbon): RibbonX bezieht sich auf die Anpassungsprogrammierung der Multifunktionsleiste und deren Inhalte
- Office-Schaltfläche (officeMenu): Die Office-Menü-Funktionen betreffen Dokumente als Datei. RibbonX kann den Inhalt des Office-Menüs verändern .
- Schnellzugriffs-Symbolleiste (qat): Enthält häufig verwendete Befehle und ist durch den Anwender direkt veränderbar. RibbonX soll die Schnellzugriffs-Symbolleiste nicht verändern, es sei denn es ist ein kompletter Neubau vorgesehen (StartFromScratch=true) .
- Registerkarten (tab) in übergeordneter Struktur (tabs): RibbonX kann eigene neue Registerkarten erstellen und die Ansicht und Beschriftungen der integrierten Registerkarten ändern.
- Kontextbezogene Registerkartensätze (contextualTabs) unterteilt in unterschiedliche (tabSet): RibbonX verändert die in vorhandenen Kontexten integrierten Registerkarten und kann Registerkarten hinzufügen - aber keine neunen Kontextsätze erzeugen.
- Gruppen (group): RibbonX kann die integrierten Gruppen verändern und neue Gruppen erstellen. Der Inhalt integrierter Gruppen kann nicht geändert werden. Gruppen haben ggf. einen DialogLaucher (in der Ecke rechts unten) die alle gruppenrelevanten Funktionen zusammenfassen (z. B. die Schriftart- oder Absatzdialoge).
- Aufgabenbereiche (taskPane): COM-Add-Ins können neue CustomTaskPanes jenseits der RibbonX-Technik erstellen.
- MiniToolbar: RibbonX kann die integrierten Befehle deaktivieren oder andere Funktionen anbinden, aber nicht verändernd eingreifen.
- Kontextmenüs: Entsprechen dem alten CommandBars-Objektmodell.
- Statusleiste: Kann per RibbonX nur ausgeblendet werden.
Ich weiß jetzt nicht, ob Sie schon wussten, dass Office 2007-Dokumente eigentlich Zip-komprimierte Ordner sind, d.h. hängt man z.B. an eine Powerpoint-Datei die Endung .zip an, dann liegen nach einem Doppelklick die gesamten Innereien des Dokumentes offen vor Ihnen. Auf diesem Trick aufbauend beschreibt der MSDN Artikel „Anpassen der Multifunktionsleisten-Benutzeroberfläche von Office (2007) für Entwickler - Teil 1“, wie man bewaffnet mit Notepad als Texteditor für den XML-Text eine Anpassung des Ribbon bewerkstelligen kann. Die Kurzform dieses Artikels lässt sich auf den Nenner bringen: Sie schreiben eine XML-Datei zur Anpassung des Ribbon, speichern die unter dem Namen customUI.xml und montieren diese Datei unter Einhaltung gewisser Richtlinien in die Office-Datei hinein. So zum Beispiel:

Da hätten wir erstmal die ehemalige Powerpoint-Datei InsertTab.ppt mit angehängtem .zip und deren Inhalt. Die Anpassungen des Ribbon liegen im Ordner customUI in der gleichnamigen XML-Datei () im Bild markiert), deren Inhalt weiter unten im CUI-Editor zu sehen ist. Damit das customUI auch ausgewertet wird, muss es im Root-Ordner _rels in der Datei .rels mit dem Eintrag
<Relationship Id="Ra76a6f5f94a04d36" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml" />
angekündigt werden. Bilder und Icons für die selbst gemachten Ribbon-Elemente legt man ins Verzeichnis customUI/images und kann sie dann via id referenzieren. Diesen ganzen Verwaltungskram können Sie dem CUI-Editor überlassen.
Mit dem Custom-UI-Editor arbeitet es sich viel unkomplizierter: Sie schreiben damit die XML-Codes, die eine Anpassung der Ribbon-Elemente veranlassen und speichern (d.h. integrieren) damit diese Daten (customUI.xml) auch ganz einfach in eine Powerpoint-, Excel- oder Word-Datei. Bei dieser Gelegenheit können Sie auch gleich ein paar Icons oder Bildchen dazu nehmen, die Sie auf Ihren eigenen Ribbon-Controls anbringen wollen. Wenn Sie diese Office-Datei, die ein Custom UI, eine benutzerspezifische Anpassung, enthält laden oder deren Fenster aktivieren, stellt sie automatisch das benutzerdefinierte Ribbon zur Verfügung. Beim Wechsel auf ein anderes Fenster werden auch die Ribbon-Einstellungen wieder zurückgesetzt.
Ein geniales Konzept, jede PowerPoint, bzw. Office-Datei kann ihre eigene Benutzeroberfläche mitbringen!
Genug der Theorie. Sie haben eine leere Präsentation unter dem Namen InsertTab.pptx gespeichert, den Custom Office UI Editor heruntergeladen, installiert, gestartet und die letzt genannte Datei damit geöffnet (File|Open). Geben Sie folg. XML-Code zur Ribbon-Anpassung ein. Die Grundstruktur des XML-Codes können Sie unter Sample | Custom Tab abrufen und auf das Beispiel anpassen:

![]()
XML-spezifisch sind die Tags, alle in Klammern <…> eingefassten Elemtente. XML-Knoten mit Unterstrukturen treten immer paarweise auf – der Knoten beginnt mit <..> und schließt mit </..>. Hat ein Knoten keinen Unterstruktur-Inhalt, besteht die schließende Klammer des einzigen Tags <aus />. Die Ribbon-Steuerelemente werden in den braunen Tags beschrieben. Die roten Attribute/Eigenschaften beschreiben das Aussehen und Verhalten der benutzerdefinierten Steuerelemente (Controls) durch Zuweisung der blauen Werte.
Die oben genannten Excel-Dateien der Downloadlinks beinhalten ein Add-In und einige Tabellen die die IDs der eingebauten Ribbon-Elemente dokumentieren. IDs sind Textbezeichnungen, sie identifizieren die Ribbon-Elemente damit man sie ansprechen und benennen kann. Die ersten drei Tags sind immer die gleichen und beschreiben den Raum für Benutzeranpassungen bis zu den <tabs>, also den Registerkarten. Die IDs TabDesign, TabAnimations und TabView stehen für die Registerkarten Entwurf, Animationen und Ansicht – sie werden einfach ausgeknipst in dem deren Eigenschaft visible (Sichtbar) verneint (false) wird. Als Ersatz dafür wird eine neue Registerkarte Design eingefügt, in die nur die beiden Gruppen Seite einrichten und Hintergrund aus dem Original-Tab Entwurf eingebaut werden. id ist dabei ein eindeutiger, freiwählbarer Begriff zur Identifizierung der Registerkarte, während idMso die eingebauten Elemente anspricht.
Die benötigten Angaben zu den idMso habe ich in PowerPointRibbonControls.xls nachgelesen:
|
TabDesign
|
tab
|
None (Core Tab)
|
|
|
|
GroupPageSetup
|
group
|
None (Core Tab)
|
TabDesign
|
|
|
GroupBackground
|
group
|
None (Core Tab)
|
TabDesign
|
|
|
TabAnimations
|
tab
|
None (Core Tab)
|
|
|
|
TabView
|
tab
|
None (Core Tab)
|
|
|
Wird die so ausgestattete Datei als Add-in gespeichert, haben Sie die Anpassungen nach Installieren des Add-In permanent zur Verfügung.
|
Element |
Beschreibung |
|
customUI |
die benutzerdefinierterdefinierten Elemente der Multifunktionsleiste |
|
ribbon |
die Multifunktionsleiste. |
|
tabs |
ein Satz von Multifunktionsleisten-Registerkarten. |
|
tab |
eine einzelne Multifunktionsleisten-Registerkarte |
|
group |
Gruppe von Steuerelementen auf der Multifunktionsleisten-Registerkarte |
|
control |
Übergeordnetes Element, steht für alle für eingebaute Steuerelemente (Controls) |
|
idMso |
ansprechen von internen, eingebauten Steuerelementen |
|
id |
benutzerdefinierte Controls eindeutig benennen |
|
label |
Bezeichnungsfeld des Steuerelements zur Anzeige in der Multifunktionsleiste |
|
size |
Legt die Größe für die Anzeige eines Steuerelements fest. ( normal|large) |
|
visible |
Gibt an, ob ein Element sichtbar ist. (false|true|0|1) |
|
insertBeforeMso |
Die idMso eines eingebauten Steuerelements vor dem ein neues Control positioniert wird |
Für das Erstellen von customUIs benötigt man also eine Übersicht über die <ribbon>-Elemente, die Steuerelemente und deren Eigenschaften sowie welche Werte die Eigenschaften haben können. Hier verweise ich auf die MSDN oder andere Quellen im Netz.
Für solche statischen Eingriffe in die Benutzeroberfläche ist keine Programmierung mehr notwendig. Einzig die XLM-Codes steuern das Aussehen und die Funktion von Steuerelementen der Multifunktionsleiste. Eingebaute Controls können auf Gruppen-Ebene manipuliert werden. Eigene Tabs, also Registerkarten, können erzeugt und eingebaute Tabs können mit eigenen Controls zum Aufruf von Makro-Prozeduren oder eingebauten Funktionen verändert werden. Weiter sind dynamische Controls über Callback-Prozeduren zu handeln, d.h. Controls, die auf Benutzertätigkeiten reagieren, wie z.B. das Einfügen-Control – wenn nichts in der Ablage ist, wird das Control deaktiviert. Dazu ist allerdings VBA-Code notwendig, der über die IRibbon-Schnittstelle mit dem CustonUI-Namespace kommuniziert – was den eigentlichen VBA-Rahmen sprengt und zu den COM-Add-Ins führt, die dann .Net-Sprachen wie VB oder C# und VC voraussetzen.

Startseite
Wir über uns
Fleischtechnik
Lemitec Forum
Aktuelles
Übersicht