Home > Artikel > Ausgabe 11/2013 > Das ImageList-Steuerelement

Das ImageList-Steuerelement

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Die beiden Steuerelemente TreeView und ListView sind praktische Helfer, wenn es um die Darstellung von Daten in hierarchischer oder Listenform geht. Beide können sogar Icons anzeigen. Diese beziehen sie ausschließlich aus dem ImageList-Steuerelement, das vorher mit diesen Icons gefüllt werden muss. Wie Sie dies erledigen, zeigt der vorliegende Artikel.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in den Datenbanken 1311_ImageList.mdb und 1311_ImageList.accdb (für die Beispiele mit Anlage-Feld).

ImageList-Steuerelement hinzufügen

Das ImageList-Steuerelement finden Sie wie die übrigen Steuerelemente der Klasse MSCOMCTL.ocx in dem Dialog, den Sie mit einem Klick auf den Eintrag ActiveX-Steuerelemente öffnen (siehe Bild 1).

Öffnen des Dialogs zum Hinzufügen von ActiveX-Steuerelementen

Bild 1: Öffnen des Dialogs zum Hinzufügen von ActiveX-Steuerelementen

Damit öffnen Sie einen Dialog, der alle verfügbaren ActiveX-Steuerelemente anzeigt. Hier wählen Sie den Eintrag Microsoft ImageList Control, version 6.0 aus (siehe Bild 2).

Auswahl des ImageList-Steuerelements aus der Liste der ActiveX-Steuerelemente

Bild 2: Auswahl des ImageList-Steuerelements aus der Liste der ActiveX-Steuerelemente

Nach dem Hinzufügen entweder per Doppelklick oder durch Markieren und anschließendes Betätigen der OK-Schaltfläche erscheint das Steuerelement recht unscheinbar in der linken oberen Ecke des Zielformulars (siehe Bild 3).

Ein sonst leeres Formular mit einem ImageList-Steuerelement

Bild 3: Ein sonst leeres Formular mit einem ImageList-Steuerelement

Noch interessanter wird es, wenn Sie nun in die Formularansicht wechseln – das Steuerelement ist dann nämlich gar nicht mehr zu sehen. Das ist auch kein Wunder, denn es soll schlicht und einfach als Container für die in TreeView- und ListView-Steuerelementen anzuzeigenden Icons dienen.

Bevor wir uns das Steuerelement genauer ansehen, geben wir ihm noch einen Namen – in diesem Fall ctlImageList.

Eigenschaften des ImageList-Steuerelements

Wenn Sie in der Entwurfsansicht des Formulars mit der rechten Maustaste auf das ImageList-Steuerelement klicken, können Sie den Kontextmenü-Eintrag ImageListCtl-Object|Properties auswählen. Dies öffnet den Dialog aus Bild 4. Sie können aber auch einfach doppelt auf das Steuerelement klicken!

Eigenschaftsfenster des ImageList-Steuerelements

Bild 4: Eigenschaftsfenster des ImageList-Steuerelements

Der Eigenschaften-Dialog hat zwei Registerseiten. General enthält allgemeine Einstellungen wie etwa die Größe der gespeicherten Icons, Images ist für die Verwaltung der eigentlichen Bilder verantwortlich.

Auf der Seite General stellen sie zunächst die Größe ein, in der die Icons im ListView- oder TreeView-Steuerelement angezeigt werden sollen. Diese Einstellung können Sie nur vornehmen, wenn das ImageList-Steuerelement noch keine Icons enthält. Üblicherweise zeigt etwa ein TreeView-Steuerelement seine Icons in der Größe 16 x 16 Pixel an. Sie können diese aber nach Wunsch auch in der Größe 32 x 32 oder 48 x 48 Pixel anzeigen – oder eine ganz andere Größe verwenden. Dazu wählen Sie die Option Custom und geben die Höhe und die Breite für die beiden Eigenschaften Height und Width ein.

Wichtig ist an dieser Stelle der Hinweis, dass die Icons immer an die gewählte Größe angepasst werden.

ImageList-Steuerelement manuell füllen

Wenn Sie dem ImageList-Steuerelement Bilder hinzufügen möchten, wechseln Sie zur Registerseite Images. Dort finden Sie als wichtigstes Element eine Schaltfläche namens Insert Picture vor (siehe Bild 5).

Icons zum ImageList-Steuerelement hinzufügen

Bild 5: Icons zum ImageList-Steuerelement hinzufügen

Ein Klick auf diese Schaltfläche öffnet einen Dialog zum Auswählen eines oder mehrerer Icons. Das Problem bei der Sache ist: Abhängig von den Eigenschaften der Bilddatei, die Sie hinzufügen möchten, kommt es gelegentlich zur Fehlermeldung Invalid Picture.

Sollten Sie über Bilddateien verfügen, die sich problemlos hinzufügen lassen, können Sie zusätzlich noch die beiden Eigenschaften Key und Tag für ein Bild einstellen.

Wichtig ist die Key-Eigenschaft: Sie muss einen eindeutigen Wert enthaltenen und identifiziert etwa beim Hinzufügen eines im ImageList-Steuerelement gespeicherten Icons in ein TreeView-Steuerelement das gewünschte Bild.

Sie können allerdings auch den numerischen Index des hinzuzufügenden Bilds angeben.

ImageList-Steuerelement per VBA füllen

Wenn Sie über Icons verfügen, die in einem Format vorliegen, dass sich nicht manuell in das ImageList-Steuerelement importieren lässt, können Sie dies per VBA erledigen. Hier gibt es zahlreiche Varianten – Sie können die Bilder direkt aus einem Verzeichnis importieren, aus dem OLE-Feld einer Tabelle oder auch aus einem Anlage-Feld (siehe hierzu auch die Artikel Bilder in Access, Teil II: Bilder in OLE-Feldern und Anlage-Felder und VBA).

Bilder aus dem Dateisystem importieren

Im ersten Beispiel gehen wir davon aus, dass sich die Icons, die Sie in einem Steuerelement wie etwa einem TreeView anzeigen möchten, in einem Ordner im Dateisystem befinden, in diesem Fall im gleichen Verzeichnis wie die Datenbank-Datei.

Ziel ist es, die vier Icons wie in Bild 6 in einem TreeView-Steuerelement abzubilden. Das Beispiel finden Sie im Formular frmImageListVBA_Dateisystem.

TreeView-Steuerelement mit einigen Beispiel­icons aus dem Dateisystem

Bild 6: TreeView-Steuerelement mit einigen Beispiel­icons aus dem Dateisystem

Wir schauen uns zunächst den Vorgang für ein einzelnes Icon an. Dazu deklarieren Sie zunächst zwei Objektvariablen, um das ImageList-Steuerelement und das TreeView-Steuerelement zu referenzieren:

Dim objTreeView As MSComctlLib.TreeView

Dim objImageList As MSComctlLib.ImageList

Dann legen Sie eine Ereignisprozedur an, die durch das Ereignis Beim Laden des Formulars ausgelöst wird. Dieses deklariert zwei weitere Variablen, nämlich objPicture, um zwischenzeitlich einen Verweis auf das in aus der Datei in den Speicher geladene Icon zu referenzieren und strPicture, um den Namen der Bilddatei zu speichern:

Private Sub Form_Load()

    Dim objPicture As stdole.StdPicture

Dim strPicture As String

Im ersten Schritt setzt die Prozedur dann den Verweis auf das ImageList-Steuerelement:

Set objImageList = Me!ctlImageList.Object

Dann speichert die Prozedur den Namen der hinzuzufügenden Bilddatei, hier add.png, in der Variablen strPicture (wir benötigen diesen Namen später mehrmals):

strPicture = "add.png"

Nun liest die Prozedur die Bilddatei in die Variable objPicture ein. Dazu nutzt sie eine Funktion aus dem Modul mdlOGL0713, das einige für die Verwendung von Bildern wichtige Funktionen bereithält.

Dieses Modul müssen Sie, wenn Sie die Funktion in eigenen Datenbanken verwenden möchten, zum VBA-Projekt der jeweiligen Datenbank hinzufügen. Die Funktion erwartet den Pfad der einzulesenden Datei als Parameter:

Set objPicture = mdlOGL0713.LoadPictureGDIP( CurrentProject.Path & "\" & strPicture)

Damit haben Sie nun eine Variable objPicture, die mit einem Verweis auf ein im Speicher liegendes Objekt des Typs StdPicture gefüllt ist – unserem Bild. Dieses Bild können wir nun zur Liste der Bilder im ImageList-Steuerelement hinzufügen. Dazu verwenden wir die Add-Methode der ListImages-Auflistung des ImageList-Steuerelements. Dieser offeriert drei Parameter:

  • Index: Gibt die Position an, an der das Bild eingefügt werden soll. Darf nicht größer sein als die Anzahl der bereits vorhandenen Bilder.
  • Key: Gibt einen eindeutigen Schlüssel für das Bild an.
  • Picture: Erwartet einen Verweis auf das StdPicture-Objekt.

In diesem Fall verwenden wir nur die letzten beiden Parameter und übergeben den namen der Bilddatei (add.png) sowie die Objektvariable objPicture mit dem Verweis auf das Bildobjekt:

objImageList.ListImages.Add , strPicture, objPicture

Nun wollen wir noch dafür sorgen, dass das Bild auch in einem Steuerelement angezeigt wird – hier in einem TreeView-Steuerelement namens ctlTreeView. Dieses referenzieren wir zunächst mit der Objektvariablen objTreeView:

Set objTreeView = Me!ctlTreeview.Object

Damit das TreeView-Steuerelement die Bilder aus dem ImageList-Steuerelement beziehen kann, weisen Sie die Objektvariable objImageList der Eigenschaft ImageList des TreeView-Steuerelements zu:

Set objTreeView.ImageList = Me!ctlImageList.Object

Schließlich fügen wir dem TreeView-Steuerelement ein neues Node-Element hinzu. Dies geschieht genau so wie bereits im Artikel Das TreeView-Steuerelement: Grundlagen, Teil II beschrieben. Der einzige Unterschied ist, dass Sie für den vorletzten Parameter Image den eindeutigen Schlüssel für das Bild im ImageList-Steuerelement festlegen:

objTreeView.Nodes.Add , , "n1", strPicture, strPicture

End Sub

Wenn Sie bereits ein Node-Objekt angelegt haben, können Sie diesem auch nachträglich ein Bild zuweisen.

Dazu müssen Sie lediglich vorab eine Variable deklarieren, mit der Sie das Node-Objekt referenzieren:

Dim objNode as MSCOMCTL.Node

Diesem weisen Sie dann das frisch erstellte Node-Objekt zu (oder auch ein bereits bestehendes):

Set objNode = objTreeView.Nodes. Add(, , "n1", strPicture)

Schließlich weisen Sie der Eigenschaft Image des Node-Objekts den Key-Wert des zu verwendenden Bildes aus dem ImageList-Steuerelement zu:

objNode.Image = strPicture

Die Eigenschaft SelectedImage

Das Node-Objekt des TreeView-Steuerelements bietet in Zusammenhang mit dem Icon noch eine weitere Eigenschaft namens SelectedImage. Damit können Sie ein weiteres Bild angeben, dass angezeigt werden soll, wenn der Benutzer das entsprechende Node-Element angeklickt hat und dieses somit das aktive Node-Element ist. Dieses können Sie sofort beim Anlegen des Node-Elements angeben (als letzten Parameter gleich hinter Image) oder als Eigenschaft SelectedImage des Node-Elements.

Mehrere Icons

Die Prozedur aus Listing 1 zeigt, wie Sie mehrere Icons aus dem Dateisystem zum ImageList-Steuerelement und anschließend zum TreeView-Steuerelement hinzufügen. Dieses Beispiel finden Sie im Formular frm­ImageListVBA_DateisystemII.

Dim objTreeView As MSComctlLib.TreeView

Dim objImageList As MSComctlLib.ImageList

Private Sub Form_Load()

     Dim objPicture As stdole.StdPicture

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!