Im Beitrag “Software freischalten per Schlüssel” zeigen wir, wie Sie mit einem Freischaltschlüssel eine Information übergeben können, welche Funktionen einer Datenbank für den Benutzer mit dem Schlüssel freigegeben sind und wie Sie etwa in einem Formular die Schaltflächen aktivieren oder deaktivieren, die diese Funktionen aufrufen. Im vorliegenden Beitrag wollen wir uns anschauen, wie Sie die Schaltflächen eines Ribbons abhängig von den mit dem Freischaltschlüssel übergebenen Daten aktivieren oder deaktivieren können.
In dem genannten Beitrag Software freischalten per Schlüssel (www.access-im-unternehmen.de/1126) gibt es eine Funktion, welche einen Wert für die mit einem Freischaltschlüssel freigeschalteten Features des Programms mitliefert. Diese bietet einen Wert von 0 bis 7, wobei diese Zahl in eine Binärzahl umzuwandeln ist und dann über die einzelnen Positionen angibt, welche der Features freigeschaltet sind.
Der Wert 7 würde also beispielsweise bedeuten, dass alle Features funktionieren sollen – 7 entspricht binär 111. Der Wert 4 würde heißen, dass nur die Funktion aktiviert ist, welche der ersten Position von links entspricht, der Wert 1, dass nur die Funktion auf der dritten Position laufen soll.
Bevor wir uns um diesen Wert und seine Interpretation für die Steuer-elemente des Ribbons kümmern, wollen wir aber erst einmal das Ribbon hinzufügen.
Verweis auf die Office-Bibliothek
Für die Programmierung des Ribbons benötigen wir zunächst einen Verweis auf die Office-Bibliothek, den wir über den Verweise-Dialog hinzufügen. Diesen öffnen Sie im VBA-Editor (Alt + F11) über den Menüeintrag Extras|Verweise. Im Dialog setzen Sie einen Haken für den Eintrag Microsoft Office x.0 Object Library, wobei x für die bei Ihnen verfügbare Version steht (siehe Bild 1).
Bild 1: Verweis auf die Office-Bibliothek
Tabelle zum Speichern der Ribbon-Definition
Danach fügen Sie eine Tabelle namens USysRibbons zur Datenbank hinzu, welche die Ribbon-Definitionen speichern soll. Diese sieht in der Entwurfsansicht wie in Bild 2 aus.
Bild 2: Definition der Tabelle USysRibbons
Wegen Ihres Namens, der USys… beginnt, wird die Tabelle normalerweise nicht im Navigationsbereich von Access angezeigt. Sie können diese jedoch einblenden, wenn Sie in den Optionen des Navigationsbereichs, den Sie durch einen Klick mit der rechten Maustaste auf den Titel des Navigationsbereichs und Auswahl des Eintrags Navigationsoptionen… aus dem Kontextmenü den Eintrag Systemobjekte anzeigen aktivieren.
Ribbon definieren
Anschließend können wir das Ribbon definieren. Dieses sieht im ersten Entwurf wie in Listing 1 aus. Den dortigen Code tragen Sie in das Feld RibbonXML der Tabelle USysRibbons ein. Das Feld Ribbonname erhält den Wert Main. Die Tabelle sieht dann im Entwurf wie in Bild 3 aus.
Bild 3: Die Tabelle USysRibbons mit der Ribbon-Definition
<xml version="1.0"> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad_NeuesRibbon"> <ribbon startFromScratch="true"> <tabs> <tab id="tab1" label="Tab 1"> <group id="grp1" label="Gruppe 1"> <button label="Button 1" id="btn1"/> <button label="Button 2" id="btn2"/> <button label="Button 3" id="btn3"/> </group> <group id="grp2" label="Gruppe 2" getVisible="getVisible"> <button label="Button 1" id="btn21"/> </group> <group id="grp3" label="Gruppe 3" getVisible="getVisible"> <button label="Button 1" id="btn31"/> </group> </tab> <tab id="tab2" label="Tab 2" /> <tab id="tab3" label="Tab 3" /> </tabs> </ribbon> </customUI>
Listing 1: Definition des Ribbons mit drei Schaltflächen, drei Tabs und drei Gruppen
Dadurch, dass wir die Eigenschaft startFromScratch des Elements ribbon auf den Wert true eingestellt haben, werden alle eingebauten Elemente des Ribbons ausgeblendet und nur noch die benutzerdefinierten Elemente angezeigt.
Damit das Ribbon nun auch noch in der Anwendung erscheint, sind noch weitere Schritte nötig. Als Erstes müssen Sie die Anwendung schließen und neu starten. Erst dann ist die neue Ribbon-Definition auch in der Auswahlliste der Ribbons für diese Anwendung enthalten. Die Auswahlliste finden Sie, wenn Sie mit einem Klick auf den Datei-Reiter des Ribbons den Backstage-Bereich öffnen und dann auf den Eintrag Optionen klicken. Im nun erscheinenden Dialog Access-Optionen wählen Sie links den Eintrag Aktuelle Datenbank aus. Rechts finden Sie dann unter Menüband- und Symbolleistenoptionen die Eigenschaft Name des Menübands, wo Sie unser soeben erstelltes Ribbon namens Main auswählen (siehe Bild 4).
Bild 4: Auswahl des Ribbons in den Einstellungen der Datenbank
Wenn Sie danach die Anwendung nochmals schließen und wieder öffnen, erscheint unser Ribbon und sieht wie in Bild 5 aus.
Bild 5: Benutzerdefiniertes Ribbon
Callback-Attribute anlegen
Nun sind allerdings noch keine Elemente deaktiviert geschweige denn hätten wir überhaupt irgendwelche Maßnahmen ergriffen, um dies zu bewerkstelligen. Wie aber wollen wir dafür sorgen, dass die Schaltflächen in Abhängigkeit von den freigeschalteten Funktionen aktiviert oder deaktiviert werden Dazu benötigen wir zunächst einige Callback-Attribute für die einzelnen Elemente sowie die VBA-Prozeduren, welche die passenden Werte zum Aktivieren oder Deaktivieren zurückliefern.
Genau genommen können wir nur die Button-Elemente aktivieren oder deaktivieren, da nur diese über eine enabled-Eigenschaft verfügen und eine entsprechende getEnabled-Eigenschaft.
Wir wollen aber auch anhand der tab– und group-Elemente zeigen, wie sich diese in Abhängigkeit vom Funktionsumfang beeinflussen lassen. Es fehlt diesen Elementen zwar an einer enabled-Eigenschaft, dafür stellen Sie aber ein visible-Attribut und ein entsprechendes getVisible-Callback-Attribut zur Verfügung.