Icons in Access-Formularen und Berichten

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Die Formulare in Access-Anwendungen lassen sich mittlerweile recht einfach mit Icons ausstatten. Nicht mit Bordmitteln gelingt jedoch das Anzeigen eines benutzerdefinierten Icons in der Titelleiste von Formularen und Berichten. Dabei wäre es doch ein optischer Leckerbissen, wenn sich die Formulare schon in der linken oberen Ecke voneinander unterscheiden würden – und wenn Sie die Objekte der Access-Datenbank als Registerkarten anzeigen, sind sie auch noch praktisch. In diesem Beitrag schauen wir uns zwei Möglichkeiten an, wie Sie das gewünschte und zum Formular passende Icon einbauen.

Individuelles Icon für Formulare

Ziel dieses Beitrags ist es, Formulare mit individuellen Icons auszustatten wie es in der Abbildung aus Bild 1 der Fall ist.

Formulare mit Icons

Bild 1: Formulare mit Icons

Dazu benötigen wir erst einmal einige API-Funktionen und Konstanten sowie eine Funktion, welche diese Elemente nutzt. Im Detail handelt es sich um die beiden API-Funktionen LoadImage und SendMessage (siehe Listing 1). Die LoadImage-Funktion lädt die .ico-Datei, die mit dem Parameter lpsz übergeben wird, in den Speicher und liefert ein Handle der Adresse zurück, an der sich das Bild dann befindet. Die übrigen Parameter nehmen beispielsweise den Bildtyp (IMAGE_ICON), die Abmessungen in Pixeln und die Art des Ladevorgangs entgegen (LR_LOADFROMFILE). Das Ergebnis ist ein Wert mit dem Datentyp Long.

Public Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, _
     ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
     
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
     ByVal wParam As Long, lParam As Any) As Long
     
Public Const IMAGE_ICON = 1
Public Const LR_LOADFROMFILE = &H10
Public Const WM_SETICON = &H80
Public Const ICON_SMALL = 0
Public Function SetFormIcon(ByVal lngHWnd As Long, ByVal strIconFile As String) As Boolean
     Dim lngIcon As Long
     lngIcon = LoadImage(0, strIconFile, IMAGE_ICON, 16, 16, LR_LOADFROMFILE)
     If lngIcon <> 0 Then
         Call SendMessage(lngHWnd, WM_SETICON, ICON_SMALL, ByVal lngIcon)
     End If
End Function

Listing 1: Code zum Anzeigen von Icons aus dem Dateisystem

Die Funktion SendMessage ist flexibel einsetzbar. In diesem Fall soll es das Handle auf das Icon zum Fenster mit einem bestimmten Handle schicken.

Das erledigen wir mit der Funktion SetFormIcon. Diese erwartet das Handle des Formulars, das mit dem neuen Icon ausgestattet werden soll, sowie den Pfad zur .ico-Datei als Parameter.

Dann ermittelt sie zuerst mit einem Aufruf der Funktion LoadImage das Handle auf die in den Speicher geladene Bilddatei und ruft dann, falls lngIcon nicht gleich 0 ist, die Funktion SendMessage auf. Dieser übergibt sie das Handle des Zielformulars, als Nachricht WM_SETICON, als Parameter ICON_SMALL und schließlich das Handle auf die Bilddatei.

Formular mit Icon ausstatten

Um das Formular über die Funktion SetFormIcon mit einem Formular auszustatten, bietet sich das Ereignis Beim Laden an. Wir fügen eine entsprechende Ereignisprozedur hinzu und legen dort die folgende Anweisung an:

Private Sub Form_Load()
     SetFormIcon Me.hwnd, CurrentProject.Path & "form.ico"
End Sub

Damit wird die angegebene .ico-Datei in den Speicher geladen und dem Formular zugewiesen. Mit CurrentProject.Path geben wir an, dass sich die Datei im Verzeichnis der aktuellen Datenbank befindet.

Variante ohne .ico-Dateien im Dateisystem

Die Optik von Formularen gewinnt deutlich mit individuellen Icons. Der kleine Nachteil ist jedoch, dass sich die .ico-Dateien dafür im Verzeichnis der Datenbank befinden müssen (zumindest in unserem Beispiel – Sie können natürlich auch andere Verzeichnisse verwenden).

Auf dieses Verzeichnis hat der Benutzer in der Regel schreibenden Zugriff – und wenn das der Fall ist, kann er auch die .ico-Dateien versehentlich löschen.

Wir probieren eine Zwischenvariante aus, bei der wir die .ico-Dateien in der Tabelle MSysResources speichern, die auch für das Speichern von Bildern für Schaltflächen et cetera in Formularen verwendet wird.

Wir schreiben die Bilder dann zur Laufzeit ins Verzeichnis der Datenbank, damit diese sicher vorhanden sind, wenn das Formular diese anfragt.

Für diese Methode benötigen wir eine weitere Funktion – aber zunächst wollen wir die gewünschten Bilddateien in die Tabelle MSysResources einfügen. Das geht am einfachsten über einen eingebauten Weg: Dazu öffnen Sie ein Formular in der Entwurfsansicht und zeigen dann mit dem Ribbon-Befehl Entwurf|Steuerelemente|Bild einfügen|Durchsuchen… einen Grafik einfügen-Dialog an.

Mit diesem wählen Sie dann die .ico-Datei aus, die Sie als Formular-Icon anzeigen möchten (siehe Bild 2).

Icons zur Tabelle MSysResources hinzufügen

Bild 2: Icons zur Tabelle MSysResources hinzufügen

Wir schauen uns das Ergebnis in der Tabelle MSysResources an. Diese finden Sie, wenn Sie in den Navigationsoptionen des Navigationsbereiches (Kontextmenü der Titelleiste des Navigationsbereiches, Eintrag Navigationsoptionen…) die Optionen Ausgeblendete Objekte anzeigen und Systemobjekte anzeigen aktivieren.

Öffnen Sie diese Tabelle, finden Sie zwar einen Eintrag vor, in dessen Feld Name die Bezeichnung add steht. Allerdings enthält das Feld Extension den Ausdruck png (siehe Bild 3).

Die Bilddatei in der Tabelle MSysResources

Bild 3: Die Bilddatei in der Tabelle MSysResources

Wenn Sie die Datei extrahieren, indem Sie doppelt auf das Anlage-Feld klicken und im Dialog Anlegen die Schaltfläche Speichern unter… betätigen (siehe Bild 4), finden Sie anschließend im Windows Explorer eine .png-Datei vor.

Extrahieren der Bilddatei aus dem Anlagefeld

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

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar