Skip to: Site menu | Main content

Staatliche Fachschule für
Lebensmitteltechnik
Kulmbach

E.C.-Baumann-Str. 22
95326 Kulmbach

info:@:lemitec.de 

Workshop: Ribbon UI

Veröffentlicht am Thursday 13 September 2007 11:07:26 von hw
knowhow.png

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:

  1. Multifunktionsleiste (Ribbon): RibbonX bezieht sich auf die Anpassungsprogrammierung der Multifunktionsleiste und deren Inhalte
  2. Office-Schaltfläche (officeMenu): Die Office-Menü-Funktionen betreffen Dokumente als Datei. RibbonX kann den Inhalt des Office-Menüs verändern .
  3. 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) .
  4. Registerkarten (tab) in übergeordneter Struktur (tabs):  RibbonX kann eigene neue Registerkarten erstellen und die Ansicht und Beschriftungen der integrierten Registerkarten ändern.
  5. 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.
  6. 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).
  7. Aufgabenbereiche (taskPane):  COM-Add-Ins können neue CustomTaskPanes jenseits der RibbonX-Technik  erstellen.
  8. MiniToolbar:  RibbonX kann die integrierten Befehle deaktivieren oder andere Funktionen anbinden, aber nicht verändernd eingreifen.
  9. Kontextmenüs:  Entsprechen dem alten CommandBars-Objektmodell.
  10. 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 mit­bringen!

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:

Custom UI Editor

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon startFromScratch="false">
   <tabs>
<tab idMso="TabDesign"visible="false"/>
     <tab idMso="TabAnimations" visible="false"/>
     <tab idMso="TabView" visible="false"/>
<tab id="tabCooperateDesign"label="Design">
            <group idMso="GroupPageSetup" />
            <group idMso="GroupBackground" />
</tab>
   </tabs>
 </ribbon>
</customUI>

XML-spezifisch sind die Tags, alle in Klammern <…> eingefassten Elemtente. XML-Knoten mit Unter­strukturen 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.

 Download Beispiel DateiBeispiel-Datei: CooperateDesign.pptx