vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Maus & Tastatur · Maus   |   VB-Versionen: VB2005, VB200821.03.11
Animierte Mauszeiger verwenden

Sie wollten schon mal farbige und animierte Mauszeiger in Ihrem Programm verwenden? Dann ist dieser Tipp genau das richtige für Sie!

Autor:   Andreas FleischmannBewertung:  Views:  10.470 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Haben Sie schon einmal versucht Ihr Programm mit animierten Mauszeigern aufzupeppen? Vielleicht haben Sie es zuerst mit einem Code wie folgendem versucht:

Private Sub CursorLoad() Handles Me.Load
  Me.Cursor = New Windows.Forms.Cursor(Application.StartupPath & "\x.ani")
End Sub

Doch leider meldet sich der Debugger mit folgendem Fehler:

--- ArgumentException wurde nicht behandelt -----------------------
Ungültiges Bildformat. Die Bilddatei ist möglicherweise beschädigt.
Parametername: Stream

Wenn man ein wenig recherchiert, stößt man schnell auf folgendem Artikel:
http://msdn.microsoft.com/de-de/library/kkw8k45d(v=VS.100).aspx

Darin steht in einem Hinweisfeld folgendes:

Animierte Cursor (ANI-Dateien) werden von der Cursor-Klasse nicht unterstützt.

Schließlich fand ich folgende Lösung, die wie so oft, auf das Windows-API zurückgreift:

Imports System.Runtime.InteropServices
Public Module MausFunktionen
  <System.Runtime.InteropServices.DllImport("user32.dll", _
  EntryPoint:="LoadCursorFromFile", _
  SetLastError:=True, CharSet:=CharSet.Unicode)> _
  Private Function LoadCursorFromFile(ByVal Filename As String) As IntPtr
  End Function
 
  Public Function LoadCursor(ByVal Filename As String) As Windows.Forms.Cursor
    Dim HandleCursor As IntPtr = LoadCursorFromFile(Filename)
    If IntPtr.Zero.Equals(HandleCursor) Then
      Throw New Exception("Der Cursor konnte nicht geladen werden! " & _
        "Möglicherweise ist die Datei beschädigt.")
      Return Nothing
    Else
      Return New Windows.Forms.Cursor(HandleCursor)
    End If
  End Function
End Module

Die Anwendung der Funktion ist nun auch nicht komlizierter als vorher:

Private Sub CursorLoad() Handles Me.Load
  Me.Cursor = MausFunktionen.LoadCursor(Application.StartupPath & "\x.ani")
End Sub

Manchmal ist es übrigens sinnvoller den Code des Load-Events in den Konstruktor zu Packen.
Im Beispielprojekt auf der vb@rchiv CD befindet sich ein animierter Cursor einer Pipette.



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.