ListBox Deluxe

Zusammenfassung

Lernen Sie ein Steuerelement kennen, mit dem Sie beispielsweise das Beziehungen-Fenster nachbauen können.

Techniken

FieldList-Steuerelement, VBA, Formulare

Voraussetzungen

Access 2000 und höher

Beispieldateien

FieldListDemo2000.zip (Access 2000 und höher)

Sascha Trowitzsch, Berlin

Ein Handicap für den Entwickler bei der Gestaltung der Benutzeroberfläche von Datenbanken ist die etwas limitierte Zahl von Steuerelementen, die Access mitbringt. Zudem ist auch die Zahl der Eigenschaften dieser Steuerelemente, von den Möglichkeiten der Datenbindung abgesehen, nicht gerade weltbewegend. Andere “richtige” Entwicklungsumgebungen wie Visual Studio, Delphi etc. bieten da einen weitaus größeren Fundus. Abhilfe schaffen da nur zusätzliche ActiveX-Controls, die, soweit sie in guter Qualität vorliegen, meist kostenpflichtig erworben werden müssen und das Problem mit der Weitergabe dieser OCXe mit sich bringen. Access im Unternehmen zeigt, dass diesbezüglich mehr in Access steckt, als man denkt.

In einer normalen Access-Installation sind bereits einige ActiveX-Steuerelemente enthalten, die Microsoft wenig oder gar nicht dokumentiert hat. Neben den Elementen der Microsoft Forms Library (fm20.dll) sind ab Office XP auch die Microsoft Common Controls mit im Boot, die zum Beispiel Treeview- und ListView-Control beherbergen.

Besonders gut versteckt hat Microsoft aber das FieldList-Steuerelement, das sich in der Datei accwiz.dll verbirgt und von den internen Assistenten verwendet wird. Ein Beispiel ist der Dialog des Dokumentierers, den Sie über den Menüpunkt Extras/Analyse/Dokumentierer öffnen. Auch eine Ansicht wie das Beziehungen-Fenster einer Access-Datenbank lässt sich mit diesem Steuerelement nachbilden.

Zum FieldList-Steuerelement gibt es weder eine Dokumentation von Microsoft noch andere Beschreibungen im Internet – mit der Ausnahme einer Beispieldatenbank von Stephen Lebans (http://www.lebans.com/vb_listbox.htm).

In diesem Artikel lernen Sie dieses Steuerelement und seine Möglichkeiten kennen. Die Eigenschaften, Methoden und Parameter des Steuerelements sind experimentell ermittelt worden. Dieser Beitrag kann nicht die komplette Beschreibung dieses Steuerelements liefern; aus der Beispieldatenbank FieldList.mdb geht jedoch alles Weitere hervor.

Die Datei accwiz.dll wird bei jeder Access-Installation seit Version 97 automatisch im Office-Verzeichnis gespeichert. Das gilt ebenso für Runtime-Installationen.

Das darin unter anderem enthaltene FieldList-Steuerelement steht somit unter Access grundsätzlich zur Verfügung, ohne dass zusätzliche Komponenten installiert werden müssten.

Das FieldList-Steuerelement stellt komplexe Listenfelder bereit, die in Erscheinung und Funktion recht flexibel sind und Drag and Drop-Operationen ermöglichen.

Steuerelement öffentlich machen

Um ein ActiveX-Steuerelement in ein Access-Formular einzufügen, bedient man sich des Menüs Einfügen/ActiveX-Steuerelement… und wählt das entsprechende Steuerelement aus. Standardmäßig findet man in der Liste des Dialogs aber keinen Eintrag namens FieldList. Microsoft hat es, aus welchen Gründen auch immer, versteckt. Mit einem kleinen Eintrag in der Registry kann man das aber ändern: Doppelklicken Sie die auf der Heft-CD befindliche Datei accwiz.reg und fügen Sie so ein Branding des Controls als verfügbares Steuerelement hinzu. Danach finden Sie das Steuerelement in der Liste der ActiveX-Steuerelemente unter dem Eintrag FieldListCtrl.1 Object.

Funktionen des FieldList-Steuerelements

In ein Formular eingefügt sieht man außer einer grauen Fläche erstmal gar nichts von dem Steuerelement. Diese Fläche ist nur ein Container für darauf zu platzierende Listboxen.

Das Steuerelement kann nämlich eine beliebige Zahl von Listboxen auf dieser Containerfläche erzeugen; diese lassen sich ja nach den Anforderungen auch auf der Containerfläche verschieben.

Bedauerlicherweise geschieht das ausschließlich über VBA-Code; das Anklicken des von ActiveX-Steuerelementen bekannten Buttons mit den Pünktchen im Eintrag Benutzerdefiniert des Eigenschaftsfensters fördert nur eine Fehlermeldung zutage – das Steuerelement enthält keine Property Pages für weitere Einstellungen.

Im überblick zunächst einige der Möglichkeiten des Controls:

  • Anzeige mehrerer Listboxen.
  • Zwischen den Listboxen können Zeilen per Drag and Drop verschoben werden (allerdings unter Zuhilfenahme von etwas VBA-Code).
  • Die erzeugten Listboxen können auf der Containerfläche frei mit der Maus verschoben werden. Alternativ kann man sie aber auch mit der Einstellung einer Eigenschaft “festsetzen”.
  • Die Größe der Listboxen kann mit der Maus beliebig verändert werden, genau so, wie das mit anderen Windows-Fenstern möglich ist.
  • Zwischen den einzelnen Listboxen beziehungsweise deren Einträgen können beliebig viele Verbindungslinien gezogen werden. Sie kennen das aus dem Beziehungsfenster von Access oder dem Abfrageneditor.
  • Die Listboxen kennen drei Darstellungsmodi (siehe Abbildungen weiter unten).
  • Die Einträge werden bei Bedarf auf mehrere Spalten umgebrochen.
  • Die Einträge der Listboxen können Checkboxen und benutzerdefinierte Icons enthalten.
  • Es gibt diverse Einstellungen für die Listboxen, die Aussehen, Hintergrundfarbe, Schrift verändern können.
  • Einige Eigenschaften der Schrift können für die Zeilen einer Listbox einzeln festgelegt werden (normal, fett, kursiv).
  • Was nicht möglich ist:

  • Die Schriftart ist nicht variabel. Es ist offenbar MS Sans Serif in 8-Punkt-Größe fest eingestellt.
  • Eine Listbox kann im Gegensatz zur Access-Listbox nur eine Spalte darstellen.
  • Das Steuerelement speichert seine eingestellten Eigenschaften nicht beständig ab. Das heißt, dass dies gegebenenfalls per Code zu erledigen ist.
  • Erscheinungsbild des Steuerelements

    Um eine Vorstellung zu bekommen, wie das Steuerelement aussehen kann, schauen Sie sich Abb. 1, Bild 2 und Abb. 3 an.

    Bild 1: Das FieldList-Steuerelement mit nackten Einträgen, mit Symbolen, mit Kontrollkästchen und mit beidem

    Bild 2: Die obigen Varianten gibt es auch ohne Titelleiste und sogar ohne Rahmen.

    Bild 3: Weitere Varianten des FieldList-Steuerelements

    Besonders interessant ist die Möglichkeit, Benutzeroberflächen im Stil des Beziehungen-Fensters von Access nachzubauen. Eine Spielwiese zum Ausprobieren der unterschiedlichen Einstellungen liefert das Formular frmFieldList (siehe Bild 4).

    Wie dort gut zu erkennen ist, lassen sich mehrere Listboxen auf der Fläche des Steuerelements positionieren. Außerdem ist das Verbinden verschiedener Einträge wie im Beziehungen-Fenster möglich.

    Es fehlt noch die Darstellung der verschiedenen Cursorformen, die das FieldList-Steuerelement anzeigen kann. Sie sind vor allem für Drag and Drop-Operationen nützlich, weil sie in etwa den Cursors entsprechen, die auch beim Ziehen von Feldern im Abfrageeditor erscheinen.

    Wie Sie diese Ansichten des Steuerelements erzeugen können, erfahren Sie teilweise im nächsten Abschnitt. Die vollständige Dokumentation finden Sie in der Beispieldatenbank FieldList.mdb und dort im kommentierten Code des Formulars frmFieldList.

    Das Objektmodell des FieldList-Steuerelements

    Vorbemerkung: Wenn Sie beabsichtigen, Ihre Datenbank mit enthaltenem FieldList-Steuerelement auch auf anderen Rechnern einzusetzen, dann sollten Sie beim Entwickeln möglichst dieselbe Office-Version verwenden.

    Das Steuerelement ist zwar seit Access 97 weitgehend unverändert geblieben, hat aber unter Access 2003 die Versions-ID 8.1, davor war es immer die 8.0. Eine mit Access 2000 erstellte Datenbank zeigt deshalb unter Umständen das Steuerelement auf einem System mit Access 2003 nicht korrekt an.

    Die erste Informationsquelle, wenn man es mit einer fremden ActiveX-Datei zu tun hat, ist der Objektkatalog. Aus ihm kann man die Klassen, Eigenschaften, Methoden und Ereignisse der Objekte erfahren. Haben Sie ein FieldList-Steuerelement in ein Formular eingefügt, so findet sich automatisch die zugehörige Bibliothek AccWizObjects im Objektkatalog. Außerdem wurde ein Verweis auf die Microsoft Access Wizzard Control Library gesetzt.

    Auf den ersten Blick scheint das Objektmodell dieser Bibliothek recht spartanisch ausgestattet. Das liegt daran, dass die meisten Objekte ausgeblendet sind. Rechtsklicken Sie also irgendwo in den Objektkatalog und aktivieren Sie den Eintrag Verborgene Elemente anzeigen des Kontextmenüs; schon füllt sich die Liste der Klassen mit vielen neuen Elementen.

    Bild 4: Beispielformular zum Experimentieren mit den Möglichkeiten des FieldList-Steuerelements

    Für das FieldList-Steuerelement sind nur die folgenden Klassen von Bedeutung:

  • FieldList: Enthält die Eigenschaften und Methoden des Containers, also der Fläche, die die Listboxen anzeigt.
  • IFieldListWnd: Stellt eine einzelne Listbox und deren Eigenschaften dar.
  • IJoinLine: Bezieht sich auf eine Verbindungslinie zwischen den Zeilen von zwei Listboxen.
  • Das FieldList-Objekt steuert eigentlich nur zwei wesentliche Eigenschaften: Die Bildliste (Picture) für die Icons der Listboxen und das Erscheinungsbild des Cursors (SetCursor). Ob Scrollbars für die Containerfläche angezeigt werden, lässt sich im Eigenschaftsfenster des Formulars festlegen, nicht aber per Code.

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    den kompletten Artikel im PDF-Format mit Beispieldatenbank

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar