Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2006.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Verwenden Sie das ListView, um Images und Icons aus verschiedenen Quellen anzuzeigen.

Techniken

ListView-Steuerelement, VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

ListView.mdb, MSCOMCTL.msi

Images und Icons im ListView-Steuerelement

André Minhorst, Duisburg

Einer der großen Vorteile des ListView-Steuerelements gegenüber dem Listenfeld von Access ist die Möglichkeit, Images und Icons anzuzeigen. Damit lassen sich sowohl Ansichten ähnlich der Miniaturansicht im Windows Explorer als auch normale Listeneinträge mit kleinen Icons anzeigen. Wie das funktioniert, erfahren Sie in diesem Beitrag.

ListView mit Bildern

Das ListView-Steuerelement bietet mit seinen verschiedenen Ansichten unterschiedliche Möglichkeiten zur Darstellung von Bildern. Interessant ist dies etwa für Anwendungszwecke wie dem Anzeigen von Thumbnails oder zum Hinzufügen von Anwendungssymbolen zu Dateilisten. Diese beiden Fälle nimmt sich dieser Beitrag in den nächsten Abschnitten vor.

Keine Bilder ohne ImageList

Das ListView-Steuerelement zeigt keine Bilder ohne ImageList an. Eine ImageList ist ein Container für Bilddateien, der entweder im Entwurf oder auch zur Laufzeit mit Bilddateien gefüllt werden kann. Die Bilder einer ImageList werden von Windows intern auf einer unsichtbaren Grafikfläche untergebracht, die man sich als ein rechteckiges Raster von Einzelbildern vorstellen kann - so wie die Zellen einer Tabelle. Damit es ein Einzelbild anhand des Index ermitteln kann, müssen die Zellen alle gleich groß sein.

Die Gesamtfläche der Grafik ist durch die Resourcen des Windows-GDI je nach Betriebssystem auf ca. 32 MB begrenzt, was bedeutet, dass die Grafik bei 32-Bit-Auflösung etwa unter WinXP eine maximale Ausdehnung von ca. 2.800 x 2.800 Pixeln haben kann.

Weitere Informationen zu diesem Thema finden Sie im Beitrag Das ImageList-Steuerelement (Shortlink 322).

Images im ListView

Die voreingestellte Ansicht des ListView-Steuerelements heißt lvwIcon und sorgt für die Anzeige eines Bildes, soweit eines in einem verknüpften ImageList-Steuerelement vorliegt und dem jeweiligen ListItem-Element zugewiesen ist. Um die nachfolgenden Beispiele nachvollziehen zu können, benötigen Sie eine Datenbank mit der Tabelle Personal der Nordwind-Datenbank und die zu der Tabelle gehörenden Bilddateien mit den Mitarbeiterportraits - diese müssen im vorliegenden Fall im gleichen Verzeichnis wie die Beispieldatenbank liegen. Außerdem legen Sie ein Formular mit je einem ListView namens ctlListView und einem ImageList-Steuerelement namens ctlImageList an.

Das Füllen der beiden Steuerelemente erfolgt per VBA in der Load-Ereignisprozedur. Die komplette Routine finden Sie in Quellcode 1, die Erläuterungen in den nächsten Abschnitten.

Abb. 1: Anzeige von Bilddateien im einem ListView-Steuerelement

Füllen des ImageList-Steuerelements

Da das ListView-Steuerelement seine Bilder nur aus dem ImageList-Steuerelement beziehen kann, füllt man dieses zunächst mit den anzuzeigenden Bildern.

Dabei durchläuft man die Datensätze der Tabelle Personal und ermittelt aus dem Feld Foto den Dateinamen des zum Mitarbeiter gehörenden Portraits. Zusammen mit dem per CurrentProject.Path ermittelten Verzeichnis erhält man den kompletten Pfad.

Und dann geht es rund: Die Anwendung liest die in den Datensätzen angegebenen und im Dateisystem gespeicherten Bilder in das ImageList-Steuerelement ein und erledigt nebenher eine ganze Menge Arbeit. Als fleißige Helfer erweisen sich dabei die Funktionen aus dem Modul mdlGDIPlus von Sascha Trowitzsch, das Access im Unternehmen Ihnen im Beitrag Bilder im Griff mit VBA und GDI+ (Shortlink 337) vorstellt.

Für das Zwischenspeichern im ImageList-Steuerelement müssen die Bilder alle die gleiche Größe haben. Da dies bei einer Vielzahl von Bildern nicht zwingend der Fall ist, sind ein paar Zwischenschritte erforderlich.

Im ersten Schritt lädt die Prozedur das per Pfad angegebene Bild mit der Funktion LoadPictureGDIP in eine Objektvariable des Typs StdPicture ein. Dann ermittelt die Funktion GetDimensionsGDIP die Abmessungen des Bildes in Pixel. Die Funktion liefert eine Struktur mit den beiden Elementen x und y zurück, aus denen sich die Abmessungen bequem auslesen lassen.

Die Abmessungen benötigen Sie, um das Bild auf die in der Konstanten lngKantenlaenge angegebene Kantenlänge zu skalieren. Dazu ermittelt die Routine zunächst, ob die horizontale oder die vertikale Kante des Bildes länger ist. Die längere wird genau auf den in lngKantenlaenge angegebenen Wert herunterskaliert, die kürzere auf einen kleineren Wert - entsprechend den Proportionen des Bildes. Das Herunterskalieren erledigt dabei die Funktion ResampleGDIP, die ein Bildobjekt und die Zielbreite und -höhe als Parameter erwartet.

Schließlich sorgt die Funktion MakeThumbGDIP dafür, dass aus einem Bild mit ungleichen Kantenlängen eines mit gleichen Kantenlängen wird. Dabei wird das Bild nicht mehr skaliert, da eine Seite ja bereits die gewünschte Länge besitzt, sondern die fehlende Fläche in der angegebenen Farbe hinzugefügt. Das Bild hat nun die richtigen Maße und kann dem ImageList-Objekt mit der Add-Methode der ListImages-Auflistung hinzugefügt werden.

Vom ImageList ins ListView

Der größte Teil der Arbeit ist geschafft. Nun müssen Sie nur noch erneut die Datensatzgruppe durchlaufen und dem ListView-Steuerelement zu jedem Datensatz einen Key (bestehend aus dem Buchstaben "a" und der Datensatznummer) und einen Verweis auf das entsprechende Bild im ImageList-Steuerelement zuweisen.

Quellcode 1: Füllen von ImageList und ListView mit Bildern

Dim objListView As ListView

Dim objImageList As ImageList

Const lngKantenlaenge As Long = 100

Private Sub Form_Load()

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Dim objBild As StdPicture

    Dim i As Integer

    Dim lngHoehe As Long

    Dim lngBreite As Long

    Dim Abmessungen As TSize

    'ListView und ImageList referenzieren

    Set objListView = Me.ctlListView.Object

    Set objImageList = Me.ctlImageList.Object

    'Imagelist leeren und Größe festlegen

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.