Backstage-Bereich von Access erweitern, Teil 2

Im ersten Teil dieser Artikelserie haben wir den Backstage-Bereich von Access mit eigenen Befehlen und einer Registerkarte ausgestattet, die Steuerelemente wie editBox, checkBox, dropDown, comboBox und radioGroup enthält. In diesem zweiten Teil gehen wir einen Schritt weiter: Wir lernen die Layout-Elemente groupBox, layoutContainer und imageControl kennen und bauen mit taskFormGroup und taskGroup komplexere Aufgabenbereiche auf.

Beispieldatenbank

Die Beispiele zu diesem Artikel findest Du in der Datenbank BackstageBereichProgrammieren.accdb. Die Tabelle USysRibbons enthält unter dem Eintrag BackstageRef bereits alle drei Registerkarten.

Die Callback-Prozeduren aus dem Modul mdlBackstage funktionieren auch für die neuen Elemente ohne Änderungen, da wir control.Id als universellen Schlüssel verwenden.

Übersicht der drei Registerkarten

Die Backstage-Definition aus dem ersten Teil enthält bisher eine Registerkarte Steuerelemente (tab) mit den grundlegenden Eingabe- und Auswahl-Steuerelementen.

In diesem Artikel ergänzen wir zwei weitere Registerkarten für unterschiedliche Anwendungszwecke: Layout (tab) demonstriert die visuelle Anordnung von Steuerelementen mit groupBox und layoutContainer. Aufgaben (tab) zeigt die Verwendung von taskFormGroup und taskGroup für aufgabenorientierte Benutzeroberflächen.

Die Registerkarte “Layout”

Die zweite Registerkarte widmet sich den Layout-Elementen. Während die Steuerelemente aus dem ersten Teil ihren Platz automatisch untereinander erhalten, bieten groupBox und layoutContainer zusätzliche Möglichkeiten, die Anordnung gezielt zu steuern.

Den vollständigen XML-Code findest Du in der Tabelle USysRibbons unter BackstageRef (siehe Bild 1). Wir erläutern ihn im Folgenden schrittweise.

Definition des zweiten Backstage-Tabs

Bild 1: Definition des zweiten Backstage-Tabs

Die Registerkarte selbst legen wir wie gewohnt als tab-Element mit firstColumn und secondColumn an. Du findest diesen Bereich gemeinsam mit den anderen neuen Tabs in der Tabelle USysRibbons für den Eintrag mit dem Wert BackstageRef im Feld RibbonName.

Diesmal fügen wir das Tab vor dem eingebauten Element FileSave ein:

<tab id="tabLayout" label="Layout (tab)"     insertBeforeMso="FileSave"     title="Verschiedene Layouts">
  <firstColumn>
    ...
  </firstColumn>
  <secondColumn>
    ...
  </secondColumn>
</tab>

Das groupBox-Element

Mit groupBox fassen wir mehrere Steuerelemente in einem beschrifteten Rahmen zusammen. Das Element besitzt ein label-Attribut, das als Überschrift des Rahmens angezeigt wird.

Im Inneren können alle Steuerelemente platziert werden, die auch in topItems und bottomItems erlaubt sind – also editBox, checkBox, radioGroup und alle weiteren aus der Gruppe EG_GroupControls.

In der firstColumn der Layout-Registerkarte platzieren wir eine Gruppe mit zwei groupBox-Elementen:

<group id="grpGroupBox" label="groupBox-Demo (group)">
  <topItems>
    <groupBox id="gbServer"         label="Serveroptionen (groupBox)">
      <editBox id="txtHost" label="Hostname (editBox)"         getText="getText" onChange="onChange"         sizeString="yyyyyyyyyyyyyy"/>
      <editBox id="txtPort" label="Port (editBox)"         getText="getText" onChange="onChange"         sizeString="yyyyy"/>
    </groupBox>
    <groupBox id="gbAuth"         label="Authentifizierung (groupBox)">
      <radioGroup id="rgAuth" label="Methode (radioGroup)" 
          getSelectedItemIndex="getSelectedItemIndex" 
          onAction="onActionRadio">
        <radioButton id="rbWindows" 
          label="Windows (radioButton)"/>
        <radioButton id="rbSQL" 
          label="SQL Server (radioButton)"/>
      </radioGroup>
    </groupBox>
  </topItems>
</group>

Die erste groupBox mit der Beschriftung “Serveroptionen” enthält zwei editBox-Elemente für Hostname und Port.

Die zweite groupBox “Authentifizierung” enthält eine radioGroup mit zwei Optionen.

Beide verwenden die Callback-Funktionen aus dem ersten Teil ohne Änderungen.

Laut XSD-Schema unterstützt groupBox neben id und label auch das Attribut expand. Damit steuern wir, ob sich der Rahmen horizontal, vertikal oder in beide Richtungen ausdehnt. Die möglichen Werte sind horizontal, vertical, both und neither.

Das Ergebnis erscheint wie in Bild 2.

Eine Gruppe in der ersten Spalte eines tab-Elements

Bild 2: Eine Gruppe in der ersten Spalte eines tab-Elements

group-Element farbig hinterlegen

Das group-Element können wir mit dem Attribut style und den Werten warning oder error auch farbig hinterlegen. Dazu ändern wir es beispielsweise wie folgt:

<group id="grpGroupBox"   label="groupBox-Demo (group)" 
  style="warning">

Dies sieht wie in Bild 3 aus.

Farbig hinterlegtes group-Element

Bild 3: Farbig hinterlegtes group-Element

Das layoutContainer-Element

Während groupBox einen sichtbaren Rahmen erzeugt, dient layoutContainer ausschließlich der Anordnung.

Es erzeugt keinen sichtbaren Rahmen, sondern bestimmt über das Attribut layoutChildren, ob die enthaltenen Steuerelemente horizontal nebeneinander oder vertikal untereinander angeordnet werden. Die beiden möglichen Werte sind horizontal und vertical.

In der secondColumn der Layout-Registerkarte demonstrieren wir beide Varianten:

<group id="grpLayoutCont"     label="layoutContainer-Demo (group)">
  <topItems>
    <layoutContainer id="lcHorizontal" 
        layoutChildren="horizontal">
      <button id="btnExport" label="Exportieren (button)" 
        imageMso="FileSave" onAction="onAction"
        style="normal"/>
      <button id="btnImport" label="Importieren (button)" 
        imageMso="FileSave" onAction="onAction" 
        style="normal"/>
      <button id="btnReset" label="Zuruecksetzen (button)" 
        imageMso="FileSave" onAction="onAction" 
        style="borderless"/>
    </layoutContainer>
    <layoutContainer id="lcVertikal" 
        layoutChildren="vertical">
      <labelControl id="lblInfo1" 
        label="Version: 1.0 (labelControl)"/>
      <labelControl id="lblInfo2" 
        label="Erstellt: 04.03.2026 (labelControl)"/>
      <imageControl id="imgLogo" imageMso="FileSave"/>
    </layoutContainer>
  </topItems>
</group>

Der erste layoutContainer mit layoutChildren=”horizontal” ordnet drei Buttons nebeneinander an.

Hier fällt das Attribut style der Buttons auf: Im Backstage-Bereich unterstützen Buttons die Werte normal (Standarddarstellung mit Rahmen), borderless (ohne sichtbaren Rahmen) und large (große Darstellung mit Beschriftung unterhalb des Icons).

Der zweite layoutContainer mit layoutChildren=”vertical” zeigt zwei labelControl-Elemente und ein imageControl untereinander. Ohne den layoutContainer wäre das Ergebnis in diesem Fall identisch, da Steuerelemente standardmäßig vertikal angeordnet werden. Der Unterschied wird deutlich, wenn man den Wert auf horizontal ändert.

Neben layoutChildren unterstützt layoutContainer laut XSD die Attribute align und expand. Mit align bestimmen wir die Ausrichtung des Containers innerhalb seines übergeordneten Elements.

Die Werte entsprechen denen von alignLabel: topLeft, top, topRight, left, center, right, bottomLeft, bottom und bottomRight (siehe Bild 4).

Die layoutContainer-Elemente in der secondColumn der Layout-Registerkarte

Bild 4: Die layoutContainer-Elemente in der secondColumn der Layout-Registerkarte

Das imageControl-Element

Das imageControl-Element zeigt ein Bild an, ohne dass der Benutzer damit interagieren kann.

In unserem Beispiel verwenden wir das Attribut imageMso, um eines der eingebauten Office-Icons anzuzeigen:

<imageControl id="imgLogo" imageMso="FileSave"/>

Alternativ kann man über das Attribut image ein eigenes Bild referenzieren oder mit dem Callback getImage das Bild dynamisch zur Laufzeit bereitstellen. Zusätzlich unterstützt imageControl die Attribute altText und getAltText für alternativen Text sowie enabled und visible zur Steuerung der Sichtbarkeit.

Für die Anzeige benutzerdefinierter Bilder ist zusätzlicher Code notwendig. Wie das gelingt, zeigen wir in einem weiteren Artikel namens Eigene Icons im Ribbon anzeigen (www.vbentwickler.de/501).

Die Registerkarte “Aufgaben”

Die dritte Registerkarte zeigt die aufgabenorientierten Elemente des Backstage-Bereichs. Diese eignen sich besonders für Oberflächen, in denen der Benutzer eine Aufgabe auswählt und dann die zugehörigen Einstellungen bearbeitet – ähnlich der Backstage-Ansicht von Office selbst.

Die Registerkarte enthält in der firstColumn ein taskFormGroup und in der secondColumn ein taskGroup:

<tab id="tabAufgaben" label="Aufgaben (tab)"     insertBeforeMso="FileSave"     title="Aufgabenbereiche im Backstage-Bereich">
  <firstColumn>
    <taskFormGroup ...>
      ...
    </taskFormGroup>
  </firstColumn>
  <secondColumn>
    <taskGroup ...>
      ...
    </taskGroup>
  </secondColumn>
</tab>

Wichtig: Laut XSD erlaubt die firstColumn entweder ein taskFormGroup oder beliebig viele group-/taskGroup-Elemente – aber nicht beides gemischt. Sobald wir ein taskFormGroup verwenden, dürfen keine group-Elemente auf derselben Ebene stehen. Die secondColumn kennt kein taskFormGroup; dort sind nur group und taskGroup erlaubt.

Access, SQL und Cloud Automation

Unser exklusives Angebot für Dich!

VB-Entwickler
12,50 € im Monat*

(Gilt für den Abschluss eines Jahres-Abonnements.)

Hier geht’s weiter →

Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.

PayPal VISA Mastercard SEPA
Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →