Mauszeiger in Formularen ändern

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

Von: Lorenz Hölscher
Stand: 4. Mai 2011
4
(1)
Anmelden um Kommentare zu schreiben

Downloads zu diesem Beitrag

Über den Autor: Lorenz Hölscher

bild80517

Lorenz Hölscher ist freiberuflicher Dozent, Berater und Programmierer mit Schwerpunkt Anwendungs-Programmierung. Vorrangig widmet er sich Access, Word und Excel sowie begleitenden grafischen Arbeiten. Er legt viel Wert auf benutzerfreundliche Oberflächen und ordentliches Design in Optik und Programmierung. Zu Hilfe kommen ihm da seine langjährigen "branchenfremden" Erfahrungen als Architekt, Layouter und Designer.

Lorenz Hölscher bietet eigene Hilfeseiten an und hat bei Microsoft Press mehrere Bücher veröffentlicht zu Access 2007, Access 2007 VBA, Word 2007 VBA und Access 2010.

Beiträge des Autors als Atom-Feed Atom-Feed: Neues von akademie.de

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.

Diese Seite ist für Mitglieder von akademie.de reserviert.

Möchten Sie die Mitgliedschaft 14 Tage kostenlos testen und den Beitrag komplett lesen?

Ich bin bereits Mitglied
Jetzt Probemitglied werden
Ich kann in den 14 Tagen Probezeit formlos z.B. per E-Mail stornieren. Wenn ich das nicht tue, entscheide ich mich für ein

Kommentar-Darstellungsoptionen

Wählen Sie hier Ihre bevorzugte Anzeigeart für Kommentare aus und klicken Sie auf „Einstellungen speichern“ um die Änderungen zu übernehmen.

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.

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