Teil 1 - Grundlagen

Ausgabe 11/2000

Download Beispieldatei

Voraussetzungen

Für ActiveX-Steuerelemente gibt es zwei Lizenzierungs-Modelle: die Run-Time- (Laufzeit) und die Design-Time-Lizenz (Entwicklung). Um mit ActiveX-Steuer-elementen program¬mieren zu können, müssen Sie die Design-Time Lizenz erwer-ben. Diese erhalten Sie in der Regel beim Hersteller. In den meisten Fällen erhalten Sie bei Erwerb der Design-Time-Lizenz auch die Run-Time-Lizenz und somit das Recht, das Steuerelement Ihrer Datenbank-Anwendung beizulegen.
Die bloße Existenz der ActiveX-Datei auf Ihrem System berechtigt nicht zwangsläufig zur Nutzung der Steuerelemente. ActiveX-Dateien erkennt man an der Endung .OCX und sind meist im Windows-Systemverzeichnis zu finden.
Um mit den meisten Microsoft ActiveX-Steuerelementen arbeiten zu können, müssen Sie entweder die MS Office Development Edition oder ein anderes Entwicklungswerkzeug von Microsoft (z.B. Visual Basic 5.0) installiert haben.
Dabei stehen Ihnen die Datei comctl32.ocx ab der Version 97 und die Datei mscomctl.ocx ab der Version 2000 zur Verfügung.

Strukturansicht-Steuerelement (Treeview)

Wie der Name schon sagt dient das Treeview-Steuerelement zur komfortablen Darstellung strukturierter Daten, ähnlich dem Verzeichnisbaum des Windows-Explorer. Datenstrukturen, die sich über mehr als zwei Tabellen erstrecken, lassen sich nur bedingt mit Unterformu¬laren übersichtlich darstellen.
Ebenso wirft schon die einfache Forderung zur Darstellung einer Mitarbeiter-hierarchie enorme Probleme auf.
Vorsicht allerdings wenn Sie mehrere Tausend Daten in einem Treeview darstellen wollen. Der Zeitfaktor beim Aufbau der Treeview steigt bei jeder Verdopplung der Anzeigemenge exponentiell. Dieser Zeitfaktor ist außerdem stark von der Rechnerleistung abhängig.

Verweis erstellen

Um ein ActiveX-Steuerelement in einem Formular verwenden zu können, muss zuerst ein Verweis auf die entsprechende OCX-Datei erstellt werden.
Dazu öffnet man irgendein Modul in der Entwurfs-Ansicht. Dabei spielt es keine Rolle, ob es sich um ein bestehendes oder neues Modul, oder um ein Klassenmodul eines Formulars handelt. Nur in der Modulansicht ist der Menüpunkt Extras/Verweise... sichtbar. Im Verweis-Dialog sind alle verfügbaren Referenzen Ihres Rechners aufgelistet. Die Einträge mit einem Häkchen stellen die aktivierten Referenzen für Ihre aktuelle Datenbank dar. Referenzen sind meist Bibliotheken, deren Funktionen Sie in der Datenbank wiederverwenden können. Zum Aktivieren der Treeview-Steuerelements klicken Sie auf Durchsuchen... und suchen im Windows-Verzeichnis im Ordner System (unter WindowsNT System32) die Datei comctl32.ocx (mscomctl.ocx). Zum einfacheren Finden wählen Sie im Dialogfenster den Dateityp: ActiveX-Steuerelemente. Nachdem Sie per Doppelklick die Datei comctl32.ocx aktiviert haben, erscheint ein zusätzlicher Verweis in der Referenzliste: Microsoft Windows Common Controls 5.0 (SP2)

Bild 1: Der Verweis-Dialog mit aktivierter Referenz auf die ActiveX-Datei comctl32.ocx

Treeview-Steuerelement einfügen

Öffnen Sie ein ungebundenes Formular im Entwurfs-Modus und lassen sich die Toolbox-Leiste anzeigen. Bei Auswahl des letzten Icons auf dieser Leiste wird eine Liste mit weiteren Steuerelementen angezeigt. Diese Liste beinhaltet alle Steuer-elemente, die auf Ihrem System installiert sind. (Das heißt aber noch nicht, dass Sie auch eine Lizenzen dafür haben. Wundern Sie sich also nicht über Fehlermel-dungen, wenn Sie diese ausprobieren wollen.)
Suchen Sie in dieser Liste nun den Eintrag Microsoft Treeview Control, Version 5.0 (SP2) und ziehen das Steuerelement mit gedrückter Maustaste auf Ihren Formu¬lar¬entwurf. Nachdem Sie die Maustaste losgelassen haben wird das Steuer-element wie üblich automatisch in das Formular eingefügt. Gegen Sie dem Steuerelement den Namen Treeview. Wenn Sie dem Treeview einen anderen Namen geben, müssen Sie das Listing 2 entsprechend anpassen.

Access Toolbox

Eigenschaften des Treeview-Steuerelements

Die meisten ActiveX-Steuerlemente stellen zusätzliche Methoden und Eigen-schaften zur Verfügung. Viele dieser zusätzlichen Eigenschaften lassen sich wie gewohnt durch das Eigenschaftsfenster im Register Andere einstellen. Auf  einige dieser Eigenschaften allerdings lässt sich nur über einen individuellen Eigen-schaften-Dialog des entsprechenden Steuerelementes zugreifen. Diesen Dialog erthalten Sie entweder durch einen Doppelklick auf das Steuerelement, oder durch Auswahl des Kontext¬menü¬punktes TreeCtrl-Objekt / Eigenschaften.

Bild 2: zusätzliche Eigenschaften des Treeview-Steuerelements

 Tabelle 1: Beschreibung der zusätzlichen Eigenschaften des Treeview-Steuerelements

Eigenschaften

Beschreibung

Style

Festlegung, welche Anzeigeelemente verwendet werden sollen (Linien, Plus/Minus, Bild, Text)

MousePointer

Form des Mauszeigers, wenn sich dieser über das Steuer­element bewegt (mit 99 – ccCustom kann man im Register Bild ein benutzterdefiniertes Bild einfügen)

LineStyle

Eigenschaft zur Einstellung der Linien-Darstellung der ersten Ebene (tvwTreeLines – Ausblenden von Plus/Minus und der Linien auf der ersten Ebene)

LabelEdit

Automatische Textbearbeitung eines Knoten bei 2. Klick oder Bearbeitung erst nach Aufruf einer Methode aus VBA.

ImageList

Jeder Knoten kann ein individuelles Bild erhalten, die in einem ImageList-Steuerelement festgelegt wurden. Diese Eigen­schaft kann ein Verweis auf dieses Steurelement beinhalten

BorderStyle

[Hat in Access keine Auswirkung]

Appearance

3D-Ansicht oder mit flachem Rahmen

OLEDragMode

Verhalten bei Drag-n-Drop-Ereignis

OLEDropMode

Verhalten bei Drag-n-Drop-Ereignis

Indentation

Einzug jedes Knoten in Twips (wobei 56.7 Twips = 1 mm)

PathSeparator

Trenner der Knoten beim Auslesen eines Knoten-Pfades

(Im Beispiel: Standort Nord/Einkauf/Kleinteile)

HideSelection

Soll Auswahl im Treeview unterdrückt werden , wenn Steuer­element den Focus verliert?

Sorted

Soll Inhalt automatisch sortiert werden? Da die automa­tische Sortierung sehr zeitaufwendig sein kann, wird unbedingt davon abgeraten.

Enabled

Aktiviert oder nicht aktiviert?

Füllen des Treeview-Steuerelementes per VBA

Wie aus dem Listing 1 und 2 erkennbar ist, muss das Treeview-Steuerelement per Code gefüllt werden. Anders als bei anderen gebundenen Steuerelementen gibt es bei TreeCtrl-Objekt keine Eigenschaft Datenherkunft. Dem Treeview muss zur Laufzeit Eintrag für Eintrag hinzugefügt werden.
Deshalb wird beim Laden (bzw. Öffnen) des Formulars eine Funktion aufgerufen, die das Steuerelement füllen soll. Dies geschieht mittels der Funktion Fill_Treeview (Listing 2).
Nach der erforderlichen Variablen-Deklaration, werden noch einige wichtige Steuerelement-Eigenschaften gesetzt, die das Handling mit dem Treeview fest-legen. Die entsprechenden Konstanten können sie in der Online-Hife (unter: Strukturansicht), im Ojektkatalog oder im Treeview-Zusatz-Eigenschaftsfenster nachlesen.
Eine besondere Eigenschaft des Treeview ist die Nodes-Eigenschaft (Nodes = Knoten). Diese gibt einen Verweis auf eine Auflistung von Node-Objekten im Strukturansichtsteuer¬element zurück. Ein Objekt kann eigene Eigenschaften, Ereignisse und Methoden beinhalten. Das bedeutet, dass die Nodes-Eigenschaft nur über eine Methode des Node-Objekts gesetzt werden kann: der Add-Methode.
Die Syntax lautet folgendermaßen:

Set nodeX = [Treeview-Objekt].Nodes.Add ([ParentKey], [Relation], [Key], Text, [Picture], [SelectedPicture])

Über die 6 Parameter der Add-Methode wird der Knoten bezüglich Position und Aussehen genau definiert (Tabelle 2).
Um das Zusammenspiel zwischen dem ParentKey- und dem Relation-Parameter zu demonstrieren könnte der Knoten Verkauf aus Listing 2 auch wie folgt einge-fügt werden:

Set NodeX = .Nodes.Add("A1B1", tvwNext, "A1B2", "Verkauf")

Am Ende des Listing 2 wird der Gebrauch des Index bzw. Key als Zugriff auf ein Node-Objekt in der Nodes-Auflistung des Treeview-Objekts demonstriert:

[Treeview-Objekt].[Nodes-Auflistung(Index/Key des Node-Objekt)].[Eigenschaft]

Über Index:    objTreeview.Nodes(1).Expanded = True
Über Key:    objTreeview.Nodes("A1B1").Expanded = True

 Tabelle 2: Beschreibung der Parameter der Add-Methode eines Node-Objekts.

Parameter

Beschreibung

ParentKey:

Verweis auf den Schlüssel (Index oder Key) eines beste­henden Nodes. Wird nur angegeben, wenn beide Nodes eine besondere Beziehung (Relation) zueinander haben.

Relation:

tvwFirst (0)

tvwLast(1)

tvwNext (2)

tvwPrevious (3)

tvwChild (4)

Festelegen der Beziehung beider Nodes zueinander:

Platzierung an erster Stelle. Die Ebene resultiert aus der Stellung des im ParentKey angegebenen Nodes.

Platzierung an letzter Stelle. Die Ebene resultiert aus der Stellung des im ParentKey angegebenen Nodes.

Platzierung hinter dem im ParentKey angegebenen Node.

Platzierung vor dem im ParentKey angegebenen Node.

Platzierung als untergeordnetes Node des im ParentKey angegebenen Nodes.

Key:

Festlegen eines alphanumerischen Strings, der ein Node in der Nodes-Auflistung eindeutig identifiziert. Der Key darf nicht mit einer Zahl beginnen. Der Key ist im Gegensatz zum Index benutzerdefiniert. Er findet Wiederverwendung im ParentKey.

Text:

Die Zeichenfolge, die im Treeview angezeigt wird.

Picture:

Der Index oder Key eines Bildes aus einem Abbildungs-Steuer­­element. Das Abbildungs-Steuerelement muss der ImageList-Eigenschaft des Treeview-Objekt zugewiesen sein. Das Bild wird links neben dem Node angezeigt.

SelectedPicture:

Der Index oder Key eines Bildes aus einem Abbildungs-Steuer­element, das angezeigt werden soll, wenn der Knoten ausgewählt wurde. (wie beim Windows-Explorer!)

Bild 3: Das Treeview-Steuerelement im Einsatz

Listing 1: Aufruf der Füll-Funktion beim Öffnen des Formulars

Private Sub Form_Open(Cancel As Integer)
   Call Fill_Treeview
End Sub

Listing 2: Funktion zum Füllen des Treeview-Steuerelements (im Klassenmodul einzufügen)

Private Function Fill_Treeview()

   '** Variablen Deklaration
   Dim objTreeview As Object
   Dim NodeX As Node

   '* Steuerelement wird auf Objekt-Variable gesetzt
   Set objTreeview = Me![Treeview]

   With objTreeview
      '** Eigenschaften des Treeview setzen **
      '***************************************

      '* Allen Anzeige-Elemente anzeigen
      .Style = tvwTreelinesPlusMinusPictureText
      '* Anzeige der Hierarchie- und Wurzellinien
      .LineStyle = tvwRootLines
      '* verhindert versehentliches Ändern des Knoten
      .LabelEdit = tvwManual
      '* 250 Twip Einzug (ca. 5 mm)
      .Indentation = 250

      .PathSeparator = "/"
      .HideSelection = False

      '** Füllen des Treeview **
      '*************************

      '* Einträge (Nodes = Knoten) der 1. Ebene
      Set NodeX = .Nodes.Add(, tvwFirst, "A1", "Standort Nord")
      Set NodeX = .Nodes.Add(, tvwNext, "A2", "Standort Süd")

      '* Einträge der 2. Ebene, Untereinträge des Knoten "Standort Nord"
      Set NodeX = .Nodes.Add("A1", tvwChild, "A1B1", "Einkauf")
      Set NodeX = .Nodes.Add("A1", tvwChild, "A1B2", "Verkauf")
      Set NodeX = .Nodes.Add("A1", tvwChild, "A1B3", "Buchhaltung")

      '* Einträge der 3. Ebene, Untereinträge des Knoten "Einkauf"
      Set NodeX = .Nodes.Add("A1B1", tvwChild, "A1B1C1", "Kleinteile")
      Set NodeX = .Nodes.Add("A1B1", tvwChild, "A1B1C2", "Rohstoffe")
      Set NodeX = .Nodes.Add("A1B1", tvwChild, "A1B1C3", "Büromaterial")

      '* Einträge der 3. Ebene, Untereinträge des Knoten "Verkauf"
      Set NodeX = .Nodes.Add("A1B2", tvwChild, "A1B2C1", "Fertigwaren")
      Set NodeX = .Nodes.Add("A1B2", tvwChild, "A1B2C2", "Halbfertigwaren")

      '* Einträge der 3. Ebene, Untereinträge des Knoten "Buchhaltung"
      Set NodeX = .Nodes.Add("A1B3", tvwChild, "A1B3C1", "Finanzen")
      Set NodeX = .Nodes.Add("A1B3", tvwChild, "A1B3C2", "Anlagen")
      Set NodeX = .Nodes.Add("A1B3", tvwChild, "A1B3C3", "Kreditoren")

   End With

   '* Demonstration des Node-Zugriffs über den Index- bzw. Key.
   '* den ersten Node aufklappen (über Index)
   objTreeview.Nodes(1).Expanded = True
   '* bestimmten Node aufklappen (über Key)
   objTreeview.Nodes("A1B1").Expanded = True

End Function