Appunti di Programmazione

Creative Commons License

Personalizzare il Puntatore del Mouse

Se volete cambiare l'aspetto del puntatore del mouse potete usare uno di questi metodi:

1- Usare un cursore appartenente alla lista standard che Visual Basic 2010 Express Edition mette a disposizione.
Il codice cambia l'aspetto del mouse quando questo si trova sopra una TextBox.

TextBox1.Cursor = Cursors.Hand

2- Caricare un puntatore attraverso il suo percosrso assoluto.
Come nell'esempio precedente, viene cambiato l'aspetto del cursore quando si trova sopra una TextBox, solo che l'immagine usata è un file che è memorizzato sul proprio PC ed è individuato dal suo percorso assoluto.

TextBox1.Cursor = New System.Windows.Forms.Cursor("D:\Documenti\mano.cur")

3- Caricare un puntatore incorporato nelle Risorse dell'applicazione:
Si carica un file .CUR nelle rirorse dell'applicazione in questo modo:

Menù Progetto->
Proprietà di NOME_PROGETTO->
TAB Risorse->
Aggiungi Risorsa->
Aggiungi File esistente->
File .CUR che vogliamo usare

Io ho usato un file denominato pugno.cur.
Come nei due esempi precedenti, anche in questo caso l'aspetto del puntatore del mouse cambia quando viene a trovarsi sopra una TextBox.

        Dim immaginePugno As New System.IO.MemoryStream(My.Resources.pugno)
        Dim cursorePugno As New Cursor(immaginePugno)

        immaginePugno.Close()

        TextBox1.Cursor = cursorePugno

I tre semplici esempi precedenti, fanno uso della classe Cursor (MSDN - Classe Cursor), che il .Net Framework mette a disposizione dei programmatori, purtroppo tale classe permette la gestione solo di file .CUR e in BIANCO e NERO.

4- Cursore a colori recuperato da un qualunque file immagine.
In rete ho trovato qualche esempio su come caricare un puntatore a colori tratto da una qualunque immagine.
Il codice che allego l'ho trovato nel Forum www.pierotofy.it, dove un utente chiedeva proprio come realizzare un puntatore a colori con VB 2008 EE. La soluzione proposta prevede l'utilizzo delle API di Windows ed è richiesto che il file immagine a colori, che servirà da puntatore, venga caricato nelle Risorse dell'applicazione che stiamo realizzando. Anche quà, viene cambiato il suo aspetto solo per una TextBox.

Imports System.Runtime.InteropServices

Public Class Form1

    Public Structure IconInfo

        Public fIcon As Boolean
        Public xHotspot As Integer
        Public yHotspot As Integer
        Public hbmMask As IntPtr
        Public hbmColor As IntPtr

    End Structure

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim bitmap As New Bitmap(140, 25)
        Dim s As Image = My.Resources.ManoColorata
        Dim g As Graphics = Graphics.FromImage(bitmap)

        bitmap = New Bitmap(s)
        g.DrawImage(s, 0, 0, 50, 50)
        TextBox1.Cursor = CreaCursore(bitmap, 3, 3)
        bitmap.Dispose()

    End Sub

    <DllImport("user32.dll", EntryPoint:="CreateIconIndirect")> _
    Public Shared Function Icona(ByRef icon As IconInfo) As IntPtr

    End Function

    <DllImport("user32.dll", EntryPoint:="GetIconInfo")> _
  Public Shared Function InfoIcona(ByVal hIcon As IntPtr, ByRef pIconInfo As IconInfo) As Boolean

    End Function

    Public Shared Function CreaCursore(ByVal bmp As Bitmap, ByVal xHotSpot As Integer, _
                                       ByVal yHotSpot As Integer) As Cursor

        Dim tmp As New IconInfo()

        InfoIcona(bmp.GetHicon(), tmp)

        tmp.xHotspot = xHotSpot

        tmp.yHotspot = yHotSpot

        tmp.fIcon = False

        Return New Cursor(Icona(tmp))

    End Function

End Class

In rete si trovano alcune applicazioni FREE che ci consentono di disegnare i propri CURSORI:
- RealWorld Cursor Editor
- Edit Cursors Online