Ribbon-Guide, Teil I: Rund um das tab-Element

Mit dem Ribbon hat Microsoft dem Entwickler eine Möglichkeit an die Hand gegeben, eine optisch ansprechende Menüstruktur zu implementieren. Verschieden große Bilder und Schaltflächen, viel mehr Steuerelemente als zuvor in den Menü- und Symbolleisten und einige weitere interessante Features. Diese Beitragsreihe liefert eine Übersicht über die Möglichkeiten und wie Sie diese erreichen. Den Start machen einige grundlegende Informationen und das tab-Element.

Wenn Sie das Ribbon mit all seinen Features nutzen möchten, sind einige Vorbereitungen zu treffen. Welche Möglichkeiten sind dies genau, die sonst nicht geboten werden Zum Beispiel die Anzeige benutzerdefinierter Bilder oder die Interaktion mit dem Benutzer und das Reagieren auf Eingaben etwa durch das Aktivieren oder Deaktivieren von Schaltflächen.

Außerdem sind noch einige grundlegende Dinge zu erledigen, so zum Beispiel das Anlegen einer Tabelle zum Speichern der Ribbon-Definitionen. Diese können dann später als Anwendungsribbon (also gleich beim Start der Anwendung) oder erst beim Anzeigen eines Formulars oder Berichts angezeigt werden.

Diese Tabelle muss USysRibbons heißen und die folgenden drei Felder enthalten:

  • ID
  • RibbonName
  • RibbonXML

Im Entwurf sieht die Tabelle wie in Bild 1 aus. Die Tabelle wurde dort bereits gespeichert und ist im Navigationsbereich sichtbar. Dies ist nicht immer der Fall, sondern nur mit speziellen Einstellungen. Diese nehmen Sie vor, indem Sie mit der rechten Maustaste auf die Titelleiste des Navigationsbereichs klicken und dort den Kontextmenüeintrag Navigationsoptionen… auswählen.

pic002.png

Bild 1: Die Tabelle USysRibbons im Entwurf

Es erscheint der Dialog aus Bild 2. Dort aktivieren Sie die Option Systemobjekte anzeigen, um die Systemtabellen und auch die Tabelle USysRibbons einzublenden.

pic001.png

Bild 2: Einblenden der Systemobjekte

Desweiteren sollten Sie, um auf Fehler im Ribbon-Code aufmerksam gemacht zu werden, die Option Fehler des Benutzeroberflächen-Add-Ins anzeigen in den Access-Optionen aktivieren (s. Bild 3).

pic003.png

Bild 3: Aktivieren der Anzeige von Ribbon-Fehlern

Nach diesen grundlegenden Vorbereitungen schauen wir uns die Programmierung eines Ribbons an.

VBA und XML

Das Aussehen eines Ribbons wird nicht wie das etwa einer Menüleiste per Benutzeroberfläche zusammengeklickt oder per VBA definiert, sondern mit einem XML-Dokument. Dieses speichern Sie im Feld RibbonXML der Tabelle USysRibbons – nebst einem entsprechenden Namen im Feld RibbonName.

Wenn eine Benutzeraktion wie etwa ein Klick auf eine Ribbon-Schaltfläche etwas auslösen soll, legen Sie eine entsprechende Prozedur an. Zu den Aktionen kommen wir später, erst einmal schauen wir uns die verschiedenen gestalterischen Möglichkeiten an.

Die einfachste Konstellation, mit der sich etwas anfangen lässt, enthält ein tab-, ein group– und ein button-Element (s. Bild 4). Dies fügt den bestehenden Tabs ein weiteres hinzu, das standardmäßig hinten eingefügt wird. Klicken Sie auf das tab-Element, zeigt dieses ein group-Element mit einem button-Element an.

pic004.png

Bild 4: Einfaches Ribbon mit einer Schaltfläche

Diese Verschachtelung erhalten Sie, wenn Sie das XML-Dokument wie in Listing 1 aufbauen.

Listing 1: Definition eines einfachen Ribbons

<xml version="1.0">
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon>
        <tabs>
            <tab id="tab1" label="tab-Element">
                <group id="grp1" label="group-Element">
                    <button label="button-Element" id="btnSchaltflaeche"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

Das customUI-Element bildet immer den äußeren Rahmen. Wenn Sie das Ribbon anpassen möchten, fügen Sie darunter das ribbon-Element hinzu. Dieses enthält das tabs-Element, das ein oder mehrere tab-Elemente enthalten kann. Das tab-Element nimmt das group-Element auf, das group-Element die eigentlichen Steuerelemente wie in diesem Fall das button-Element.

Access-Version

Das customUI-Element enthält einen Hinweis auf den verwendeten Namespace. Für Office 2007 lautet dieser wie folgt:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

Unter Office 2010 verwenden Sie dieses Element:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">

Der Unterschied ist, dass Access die folgende Ribbon-Definition mit einer .xsd-Datei vergleicht, welche Informationen darüber enthält, wie die Ribbon-Definition aufgebaut sein darf. In der Version für Office 2007 können Sie beispielsweise das officeMenu-Element einsetzen, in der Version für Office 2010 nicht mehr. Dafür dürfen Sie in der Version für Office 2010 das backstage-Elemeent deklarieren.

Wenn Sie eine für Access 2010 angelegte Ribbon-Definition unter Access 2007 einblenden möchten, führt dies zu einem Fehler, weil Access 2007 den Namespace nicht verarbeiten kann. Wenn Sie eine für Access 2007 vorgesehene Ribbon-Definition unter Access 2010 verwenden, wird dieses erkannt. Lediglich die benutzerdefinierten Einträge unterhalb des officeMenu-Elements werden nicht wie unter Access 2007 interpretiert, sondern im Backstage-Bereich links unten eingebaut (s. Bild 5).

pic014.png

Bild 5: Das benutzerdefinierte officeMenu-Element wird in Access 2010 unterhalb vom Hilfe-Menüpunkt im Backstage angeboten.

Das officeMenu-Element können Sie hingegen nicht in Definitionen für Access 2010 einsetzen und umgekehrt auch nicht das backstage-Element in Definitionen für Access 2007. Sie müssen also, wenn Sie diese Elemente verwenden möchten, tatsächlich zwei Versionen der Datenbank für Access 2007 und Access 2010 verteilen.

Ich habe einige wenige Alternativen zur Herstellung von Kompatibilität bezüglich der Ribbon-Definitionen getestet, mit denen ich um die Verwendung zweier Versionen einer Anwendung für die verschiedenen Access-Versionen herumkommen wollte – immerhin müsste man änderungen sonst immer gleich an zwei Datenbankdateien durchführen.

Die erste Idee war, die Tabelle USysRibbons umzubenennen – beispielsweise in _USysRibbons – und dann eine Abfrage namens USysRibbons zu erstellen, die alle Datensätze der umbenannten Tabelle _USysRibbons enthält. Dabei soll die Tabelle gleich zwei Versionen einer jeden Ribbon-Definition enthalten. Die Abfrage sollte dann etwa anhand einer VBA-Funktion ermitteln, ob gerade Access 2007 oder Access 2010 geöffnet ist, und dann die entsprechende Version der Ribbon-Definition zurückgeben. Leider scheiterte dieser Versuch bereits an einer einfachen, auf der Tabelle mit den Ribbon-Definitionen basierenden Abfrage namens USysRibbons – Access pocht nämlich anscheinend darauf, dass USysRibbons eine Tabelle und keine Abfrage ist.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar