Ribbons, Teil II: Bilder im Ribbon

Mit Access 2007 sind die Menüleiste und die Symbolleisten von Access weggefallen. Die Befehle wurden stattdessen in das so genannte Ribbon übertragen. Das Ribbon bietet wesentlich mehr Möglichkeiten als seine Vorgänger, aber es ist auch aufwändiger zu programmieren. Dies gelingt nicht mehr einfach per VBA, sondern Sie müssen sich zusätzlich auch noch in XML einarbeiten – zumindest in die grundlegenden Techniken. Das ist aber kein Problem, denn wir zeigen Ihnen in dieser Artikelreihe alles, was Sie wissen müssen, um Ihren Anwendungen selbst definierte Ribbons hinzuzufügen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1611_Ribbon.accdb.

Schaltfläche, Aktion – fertig!

In der ersten Ausgabe dieser Artikelreihe haben wir Ihnen gezeigt, wie Sie tab-, group– und button-Elemente zu einem Ribbon hinzufügen und eine Schaltfläche mit einem Attribut namens onAction ausstatten, für das wir eine VBA-Routine hinterlegen, die beim Anklicken der Schaltfläche ausgelöst wird. Damit haben wir schon die notwendigsten Funktionen des Ribbons abgedeckt. Aber es gibt natürlich noch viele Feinheiten und Erweiterungsmöglichkeiten sowie einige Steuerelemente, die wir Ihnen noch vorstellen werden. Bevor wir damit fortfahren, schauen wir uns allerdings noch an, wie Sie eine Schaltfläche eines Ribbons (und später auch andere Steuerelemente) mit Bilder ausstatten. So können Sie eine ansprechende und gleichzeitig ergonomische Benutzeroberfläche erstellen.

Bilder im Ribbon

Um Bilder auf den Schaltflächen des Ribbon anzuzeigen, benötigen Sie folgende Dinge:

  • die anzuzeigende Bilddatei,
  • die Angabe eines auf die Bilddatei verweisenden Eintrags für das Attribut image des jeweiligen Steuerelements,
  • eine für das Callback-Attribut loadImage des Elements custom-UI hinterlegte VBA-Funktion, welche das Bild in die Schaltfläche lädt.

Außerdem benötigen wir einige Hilfsfunktionen, die wir in einem eigenen Modul in der Datenbank hinterlegen wollen.

Bilddatei hinzufügen

Um Bilder im Ribbon anzuzeigen, benötigen Sie zunächst eine entsprechende Bilddatei. Diese fügen Sie dann in die seit Access 2010 standardmäßig in einer Anwendung enthaltene Tabelle MSysRecourses ein. Das hört sich aufwendiger an, als es ist. Alles, was Sie dazu tun müssen, ist das öffnen eines Formulars in der Entwurfsansicht, ein Mausklick auf den Ribbon-Eintrag Entwurf|Bild einfügen|Bild einfügen|Durchsuchen … (siehe Bild 1) und die Auswahl der gewünschten Bilddatei im Grafik einfügen-Dialog.

Hinzufügen einer Bilddatei per Formular-Entwurf

Bild 1: Hinzufügen einer Bilddatei per Formular-Entwurf

Hier können Sie optimalerweise auf eine Bibliothek von Icons zugreifen wie im Beispiel aus Bild 2. Wir verwenden übrigens die Icon-Sammlung von www.iconexperience.com.

Auswahl der Bilddatei

Bild 2: Auswahl der Bilddatei

Nachdem wir ein Bild zur Datenbank hinzugefügt haben, erscheint dieses in der Liste der Bilder im soeben zum Hinzufügen genutzten Ribbon-Dialog (siehe Bild 3).

Hinzugefügte Bilddatei im Ribbon

Bild 3: Hinzugefügte Bilddatei im Ribbon

Außerdem, und das ist für uns entscheidend, erscheint die Bilddatei auch in der Tabelle MSysResources. Diese können Sie erst sehen, wenn Sie die Optionen Systemobjekte anzeigen und Ausblendete Objekte anzeigen der Optionen des Navigationsbereichs aktiviert haben. Dann erscheint in dieser Tabelle ein neuer Eintrag mit der hinzugefügten Bilddatei (siehe Bild 4). Dies ist der gängige Speicherplatz für Bilddateien, die in Schaltflächen in Formularen oder auch im Bild-Steuerelement angezeigt werden sollen. Wichtig ist, dass wir uns den Namen ohne Dateiendung merken, in diesem Fall also schlicht apple.

Neue Bilddatei in der Tabelle MSysResources

Bild 4: Neue Bilddatei in der Tabelle MSysResources

Hilfsroutinen hinzufügen

Nun fügen Sie das Modul mdlRibbonImages aus der Beispieldatenbank zu der Zieldatenbank hinzu, in der Sie das Ribbon anlegen und mit Bildern versehen möchten. Dieses enthält als wichtigstes Element für uns die Funktion PicFromSharedResource_Ribbon, die als einzigen Parameter den Wert des Bildes in der Spalte Name der Tabelle MSysResources erwartet. Sie liefert ein Objekt des Typs StdPicture zurück, welches wir in der nachfolgend definierten Ribbon-Callback-Routine direkt dem Ribbon-Steuerelement zuweisen können.

Routine loadImage hinzufügen

Zu dem Modul namens mdlRibbons, dem Sie schon im ersten Teil der Artikelreihe die onAction-Routine hinzufügt haben, fügen Sie nun noch die Routine aus Listing 1 hinzu. Diese hat zwei Parameter, von denen der erste vom aufrufende Steuerelement geliefert (control) und der zweite an dieses Steuerelement zurückgegeben wird (image). Innerhalb dieser Prozedur müssen wir nun einige Zeilen Code hinterlegen, welche dafür sorgen, dass die Bilddatei aus der Tabelle MSysResources an die Ribbon-Schaltfläche zurückgegeben wird, deren Name mit dem ersten Parameter übergeben wurde. Dazu lesen wir zunächst mit der DLookup-Funktion den Wert des Feldes ID für den Datensatz mit dem übergebenen Wert im Feld Name aus. Konnte dieser nicht gefunden werden, wird die Variable lngID nicht mit dem Wert aus ID, sondern mit dem Wert 0 gefüllt. Sollte bei diesem Aufruf der Fehler 3078 auftreten, ist die Tabelle MSysResources offensichtlich nicht vorhanden und muss dann nachträglich hinzugefügt werden, worauf eine entsprechende Meldung hinweist. Hat lngID den Wert 0, ist das angeforderte Bild nicht vorhanden, was ebenfalls zu einer Meldung führt.

Public Sub loadImage(control, ByRef image)
     Dim lngID As Long
     On Error Resume Next
     lngID = Nz(DLookup("ID", "MSysResources", "Name = '" & control & "'"), 0)
     If Err.Number = 3078 Then
         MsgBox "Die Tabelle 'MSysResources' mit den Images für die Anzeige im Ribbon fehlt." & vbCrLf _
             & vbCrLf, vbOKOnly + vbExclamation, "Tabelle MSysResources fehlt"
         Exit Sub
     End If
     On Error GoTo 0
     If lngID = 0 Then
         MsgBox "Das Image '" & control & "' ist nicht in der Tabelle MSysResources vorhanden. " & vbCrLf _
             & "Fügen Sie dieses über zur Tabelle MSysResources hinzu, " & vbCrLf _
             & "beispielsweise durch Hinzufügen eines Bildes zu einem Formular."
     Else
         Set image = PicFromSharedResource_Ribbon(CStr(control))
     End If
End Sub

Listing 1: Routine zum Laden einer Bilddatei in ein Ribbon-Steuerelement

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar