Images und Icons im ListView-Steuerelement

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

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.

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).

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.

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar