Mauszeiger in Formularen ändern

Wie Sie in Access beliebige, auch eigene oder animierte, Mauszeiger verwenden

4
(1)
Kommentar schreiben
Stand: 4. Mai 2011

Mit nur wenig Programmieraufwand können Sie in Access den Mauszeiger ändern, eigene, auch animierte Mauszeiger verwenden und diese dann einzelnen Objekten wie beispielsweise Formularfeldern zuweisen. Das erzeugt nicht nur interessante Effekte, sondern ist insbesondere dann sinnvoll, wenn Benutzer einen bestimmten Mauszeiger erwarten, wie beispielsweise in Form einer Hand über einem Hyperlink.

Access kennt keine Eigenschaft, um den angezeigten Cursor für ein Formularfeld zu ändern. Das ist schade, denn in den UserForms der übrigen Office-Programme geht es mit der MousePointer-Eigenschaft schließlich auch. Sie werden aber sehen, dass es mit ziemlich geringem Aufwand möglich ist, jedem Objekt einen eigenen Mauscursor "unterzujubeln".

Doch zuerst brauchen Sie eine passende Datei, denn Cursor-Bilder haben ein eigenes "*.cur"- bzw. "*.ani"-Dateiformat. Aber auch das ist unproblematisch, denn abgesehen von einem breiten Angebot im Internet finden Sie auch auf Ihrer Festplatte (vermutlich im Verzeichnis "..\Windows\Cursors\") viele geeignete Dateien.

Cursor laden

Nun müssen Sie nur noch dafür sorgen, dass das Bild aus der Datei an den Mauszeiger gelangt. Dazu gibt es eine API-Funktion namens LoadCursorFromFileA zum Laden und eine namens SetCursor zum Zuweisen. Diese müssen am Anfang eines normalen Moduls wie folgt deklariert werden:

Declare Function LoadCursorFromFileA Lib "user32" ( _
	ByVal lpFileName As String) As Long
Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long

Mit diesen beiden Funktionen braucht es nur noch eine eigene Prozedur MausHand im gleichen Modul, um der Maus einen neuen Look zu geben:

Sub MausHand()
	Dim strPfadCursor As String
	Dim lngCursor As Long

	strPfadCursor = CurrentProject.Path & "\Banana.ani"
	'strPfadCursor = CurrentProject.Path & "\Hand.cur"

	lngCursor = LoadCursorFromFileA(strPfadCursor)
	If lngCursor = 0 Then
		Exit Sub
	Else
		Call SetCursor(lngCursor)
	End If
End Sub

Dabei wird zuerst die Cursor-Datei im gleichen Verzeichnis wie die Datenbank gesucht. Wie Sie sehen, sind sowohl die normalen Cursor in "*.cur"-Dateien als auch die animierten Cursor der "*.ani"-Dateien einsetzbar. Damit es funktioniert, müssen Sie selbstverständlich die angegebenen Cursor-Dateien in das Datenbank-Verzeichnis kopieren.

Als Mitglied können Sie diesen Beitrag weiterlesen!

Werden Sie Mitglied und testen Sie akademie.de 14 Tage lang kostenlos!

In den ersten 14 Tagen haben Sie Zugriff auf alle Inhalte auf akademie.de, außer Downloads. Sie können in dieser Zeit ohne Angabe von Gründen stornieren. Eine E-Mail an service@akademie.de genügt. Nur wenn Sie Mitglied bleiben, wird der Mitgliedsbeitrag nach Ende der 14tägigen Stornofrist abgebucht.

Ich bin bereits Mitglied
Jetzt Mitglied werden und akademie.de 14 Tage kostenlos testen
Ich entscheide mich für folgende Zahlungsweise:
14 Tage Stornorecht:
Ich kann meine Mitgliedschaft in den ersten 14 Tagen jederzeit formlos stornieren, z.B. per E-Mail an service@akademie.de.

Hallo,

von "Declare..." bis zum Ende der Prozedur "MausHand" muss der Code in ein Standard-Modul (im Text als "normales" Modul bezeichnet). Nur die "edtDatum_MouseMove"-Prozedur darf und muss in das Modul des Formulars, welches nämlich vom Typ Klassen-Modul ist. Dann klappt alles.

Mit freundlichen Grüßen,
Lorenz Hölscher

Vielen Dank für den Beitrag. Ich arbeite mit MS Access 2007. Das VBA-Script habe ich per D&D kopiert.
Das Script siet wie folgt aus:

Declare Function LoadCursorFromFileA Lib "user32" (ByVal lpFileName As String) As Long
Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long

Sub MausHand()
Dim strPfadCursor As String
Dim lngCursor As Long
strPfadCursor = CurrentProject.Path & "\Plus! AqHand.cur"
'strPfadCursor = CurrentProject.Path & "\Hand.cur"
lngCursor = LoadCursorFromFileA(strPfadCursor)
If lngCursor = 0 Then
Exit Sub
Else
Call SetCursor(lngCursor)
End If
End Sub

Private Sub edtDatum_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
MausHand
End Sub

Beim Ausführen des MouseMove-Befehls erhalte ich aber folgende Fehlermeldung:

Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck Bei Mausbewegung eingegeben. Dieser Ausdruck hat einen Fehler verursacht. Konstanten, Zeichenfolgen fester Länge, benutzerdefinierte Datenfelder und Declare-Anweisungen sind als Public-Elemente von Objectmodulen nicht zugelassen.

Können Sie mir helfen?

MfG H.A.

Downloads zu diesem Beitrag

Newsletter abonnieren