Cambiare Puntatore Mouse in VB.net

mercoledì 06 dicembre 2006 - 17.08

satomi Profilo | Junior Member

Ho un problema dovrei cambiare il puntatore del mio mouse in un oggetto del mio form precisamente nell'oggetto groupbox, ma non vorrei che prendesse i puntatori dati da windows ma vorrei che prendesse una mia icona (jpg, ico, gif, ecc. ecc.) é possibile farlo??? Si deve usare qualche API??
Spero che fate qualcuno mi risponda....
Grazie 1000 Ciao

0v3rCl0ck Profilo | Guru

Ciao,

puoi ad esempio fare così nel costruttore della form:

Dim fsCur As IO.FileStream = New IO.FileStream("c:\MyCursor.cur", IO.FileMode.Open) Dim MyCur As Cursor = New Cursor(fsCur) fsCur.Close() Me.GroupBox1.Cursor = MyCur

però questo è un metodo poco elegante, ma comodo se vuoi cambiare spesso l'icona o dare la possibilità di avere skin, comunque serve per farti capire che basta avere in mano uno stream e passarlo al costruttore nel Cursor e poi passare il nuovo cursore creato alla proprietà del GroupBox e il gioco è fatto.
Una soluzione più elegante (se non necessiti di cambiarla spesso) sarebbe quella di mettere l'icona come resource del progetto (o della form, se è specifica) e poi leggerti lo stream dalle resources.


Enjoy it

satomi Profilo | Junior Member

Questa soluzione va bene per i vari oggetti del form, però ho notato che sul power point non funziona. Allora cerco di spiegarmi meglio: nella mia form utilizzo l'oggetto groupbox e all'interno di questo oggetto apro un file di power point (PPT), quindi se cambio il mio cursore del mouse cambia in tutti gli oggetti tranne che su sul power point che mi diventa di nuovo come freccia, forse dovrei cambiare il puntatore non nel form ma proprio da windows??? E' possibile utilizzare questa soluzione attraverso VB.net??? Spero che qualcuno mi risponda...

Grazie 1000
ciao

0v3rCl0ck Profilo | Guru

prova a cambiarlo a tutto la form con Me.Cursor ti accade la stessa cosa? oppure l'oggetto power point non ha anch'esso la proprietà cursor?

satomi Profilo | Junior Member

Ho già provato a cambiarlo in tutto il form ma niente, fuori dall'oggetto power point funziona appena dentro all'oggetto power point ritorna il cursore normale cioè la freccia, l'oggetto power point ha le proprietà per cambiare il cursore, ma purtroppo gli devvi associare dei valori predefiniti cioè 0,1,2,3,4,5 quindi non riesco ad associare l'oggetto cursore creato prima. Per questo ho chiesto se qualsuno sa l'API per cambiare il cursore del mouse.... Almeno questo è l'unica soluzione che mi viene in mente..... Opppure hai altre idee????
Grazie ciao

0v3rCl0ck Profilo | Guru

sinceramente sulla documentazione ho trovato ke la proprietà da cambiare sarebbe:

System.Windows.Forms.Cursor.Current

ma non mi sembra funzionare, poi sapevo di api ke cambiavano il cursore, ma sembra che con xp (o .NET) non vegano minimamente prese in considerazione questi metodi, tu provali, sul mio windows non sembrano funzionare:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Enjoy it

satomi Profilo | Junior Member

Penso proprio che nn si possare utilizzando power point intendo. Perchè se io ad esempio metto un qualsiasi oggetto trasparente sopra all'oggetto power point lui nn mi visualizza power una parte della sli deid power point ho rpovato anche a utilizzare le API in questo o mod:

Imports System.Reflection

Public Class Form1
Inherits System.Windows.Forms.Form

Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As IntPtr

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim screenClasshWnd As Integer
Dim minuti2 As String

Dim myCursor As New Cursor(Windows.Forms.Cursor.Current.Handle)

Dim colorCursorHandle As IntPtr = LoadCursorFromFile("E:\img_cursori\cursor.cur")
myCursor.GetType().InvokeMember("handle", BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, myCursor, New Object() {colorCursorHandle})
Me.Cursor = myCursor
end sub

Ma anche così niente in tutto il form lo cambia tranne che sull'oggetto power point

Nessuno sa se è possibile cambiare da VB.net il cursore di windows, cioè nn solo nella mia form ma in tutto windows tramite un'applicazione???? Poi penso di gestire il tutto, ma purtroppo nn so come si faccia.

Spero che qualcuno mi rispondi

Ciao


0v3rCl0ck Profilo | Guru

Questo è il metodo più a basso livello utilizzando le api e funziona:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ricorda di importare l'InteropServices: Imports System.Runtime.InteropServices

nell'esempio sopra il button1 cambia icona e mette quella del file C:\3dgarro.cur ed il button2 ripristina il vecchio cursore, e come puoi vedere quando lo modifichi rimane per sempre quello li anke in windows, fino a quando non premi il button2. se proprio non ti dovesse andare sul controllo power point, sicuramente hai lapossibilità di leggere l'handle del controllo, quindi lo passi alla funzione SetClassWord che serve appunto per forzare il cursore di un determinato handle: SetClassWord(Me.PPTControlObject.Handle, New IntPtr(GCW_HCURSOR), hcursor)

ti consiglio di guardare questo help ke puoi scaricare gratuitamente, io lo usavo con il vecchio vb6 e mi è sempre stato di grandissimo aiuto, oltre a tutto ora l'hanno anke allineato con .net: http://www.allapi.net/agnet/appdown.shtml vedrai ke guardando un po' li dentro ci salti fuori, cmq nell'esempio sopra ti ho dichiarato più o meno tutte le funzioni riguardanti i cursori di windows, quindi per sapere come e cosa fanno, guarda la guida sopra citata, ke vengono spiegati bene e ci sono anche gli esempi.

Spero di esserti stato utile.


Enjoy it

satomi Profilo | Junior Member

Grazie ora funziona......... grazie ancora

Ciaoooooooooooooooo

0v3rCl0ck Profilo | Guru

Di niente, sono molto contento ke alla fine ti sono stato di aiuto


Enjoy it
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5