Oppure

Loading
19/04/10 8:23
TronSoft
Ciao,
sono un programmatore dilettante orfano di VB 6... (quante volte l'avete sentita questa?...) Vi scrivo con la speranza che potrete aiutarmi (anche questa, eh?).
Come faccio in VB 2008 ad impostare il cursore con una mia immagine personalizzata (vedi allegato), nota bene, a centinaia di colori e con antialias, da formati come PNG o ICO, per intenderci, e non una volgare CUR in bianco e nero!, cosa che in VB 6 facevo benissimo (grazie alle funzioni trovate nell'ottimo sito VBAccelerator, ormai però defunto, ahimé...)???
Sono giorni che mi rompo la testa, sia provando da me (ammetto di essere ancora disorientato con VB 2008...) sia cercando una soluzione in rete... Ma niente...
Potete aiutarmi?
Grazie infinite!
;-)
Antonio
aaa
19/04/10 11:55
Thejuster
Non è una cosa facile da fare,
devi tener conto dell'offset X e Y dello schermo più la grandezza del Cursor.Clip

fare un calcolo adeguato in modo che il click corrispondi alla cordinata perfetta del dito.

nascondere il cursore con Cursor.Hide();
e magari un draw con un timer sul form che segue il cursore.

mire.forumfree.it/ - Mire Engine
C# UI Designer
19/04/10 12:12
Federico_VbNet_Programmer
Postato originariamente da Thejuster:

Non è una cosa facile da fare,
devi tener conto dell'offset X e Y dello schermo più la grandezza del Cursor.Clip

fare un calcolo adeguato in modo che il click corrispondi alla cordinata perfetta del dito.

nascondere il cursore con Cursor.Hide();
e magari un draw con un timer sul form che segue il cursore.



Si la tua è una ottima idea,ma la devi fare a grandezza del cursore se vuoi che l'immagine sembra esso,poi scegli tu:D
aaa
19/04/10 13:35
TronSoft
Scusate... Vi ringrazio, ma... non ho capito niente!
Che dovrei fare??? Qual è la procedura da seguire, i comandi da utilizzare ecc.?
Risposte criptiche non è che mi siano d'aiuto...
Grazie ancora,
A.
aaa
19/04/10 15:46
Thejuster
Postato originariamente da TronSoft:

Scusate... Vi ringrazio, ma... non ho capito niente!
Che dovrei fare??? Qual è la procedura da seguire, i comandi da utilizzare ecc.?
Risposte criptiche non è che mi siano d'aiuto...
Grazie ancora,
A.


ciptiche?

non è che parliamo in cript ma almeno un pò di teoria in materia serve....
o magari un pò di studio alle WinApi non farebbe male.

Un modo semplice per farlo e quello che ti ho descritto prima
altrimenti ci sono le api.

prima incapsuli un immagine in un contenitore Image,
e dopo crei il cursore sfruttando l'api CreateIconIndirect

puoi perfino usare una stringa come cursore.

al load del form


   Bitmap bitmap = new Bitmap(140, 25);
            Graphics g = Graphics.FromImage(bitmap);
            using (Font f = new Font(FontFamily.GenericSansSerif, 10))
                g.DrawString("Thejuster", f, Brushes.Green, 0, 0);

            this.Cursor = CreaCursore(bitmap, 3, 3);

            bitmap.Dispose();


dopo


   public struct IconInfo
        {
            public bool fIcon;
            public int xHotspot;
            public int yHotspot;
            public IntPtr hbmMask;
            public IntPtr hbmColor;
        }

        [DllImport("user32.dll",EntryPoint="CreateIconIndirect")]
        public static extern IntPtr Icona(ref IconInfo icon);

        [DllImport("user32.dll",EntryPoint="GetIconInfo")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool InfoIcona(IntPtr hIcon, ref IconInfo pIconInfo);

        public static Cursor CreaCursore(Bitmap bmp, int xHotSpot, int yHotSpot)
        {
            IconInfo tmp = new IconInfo();
            InfoIcona (bmp.GetHicon(), ref tmp);
            tmp.xHotspot = xHotSpot;
            tmp.yHotspot = yHotSpot;
            tmp.fIcon = false;
            return new Cursor(Icona(ref tmp));
        }


Ciao e buon divertimento :k:


Edit: (così evitiamo un'altro post :rotfl: )

per quello che ti serve
devi cambiare il contenuto del form load in questo


Bitmap bitmap = new Bitmap(140, 25);            
            Image s = Image.FromFile("C:\mano.png");    
            Graphics g = Graphics.FromImage(bitmap);
            bitmap = new Bitmap(s);       
            g.DrawImage(s, 0, 0, 50, 50);
            this.Cursor = CreaCursore(bitmap, 3, 3);

            bitmap.Dispose();


:k:

Ultima modifica effettuata da Thejuster 19/04/10 16:18
mire.forumfree.it/ - Mire Engine
C# UI Designer
19/04/10 16:12
TronSoft
Ti ringrazio, ma come ho dichiarato all'inizio, non solo sono un dilettante (e quindi per me api o vespe, sempre diffidente sono...) ma anche nuovo a VB 2008...
Oltretutto tu mi parli in C...!
:-(
Insomma, non sono capace di mettere a frutto le tue indicazioni... Non so di che parli!
Grazie lo stesso... Pensavo (speravo, m'illudevo...) di ottenere una risposta più semplice e chiara... Che so, un esempio...
Non è colpa tua: qui siete tutti esperti, sarò io che ho sbagliato sito...
Ciao
A.
aaa
19/04/10 16:31
Thejuster
non è C e C#
basta convertilo in vb.net :_doubt:

tieni il codice completo sperando che ti sia di aiuto........

Al form load




Dim bitmap As New Bitmap(140, 25)
Dim s As Image = Image.FromFile("C:\mano.png")  'Posizione dell'immagine
Dim g As Graphics = Graphics.FromImage(bitmap)
bitmap = New Bitmap(s)
g.DrawImage(s, 0, 0, 50, 50)
Me.Cursor = CreaCursore(bitmap, 3, 3)

bitmap.Dispose()



funzioni api


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


<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



No, non sbagli affatto,
anzi..

ma non tutto e sempre semplice.
cioè per spiegarti il tutto dovrei iniziare dalla A e finire alla Z

cmq quello e sorgente C#
ti bastava andare qui

developerfusion.com/tools/convert/csharp-to-vb/

postare il mio sorgente e il programma
te lo converte in vb.net

ciao

Prova vedi che funziona :k:



Ultima modifica effettuata da Thejuster 19/04/10 16:32
mire.forumfree.it/ - Mire Engine
C# UI Designer
19/04/10 16:46
TronSoft
Io continuo a ringraziarti!
Non so se sarò in grado, ma proverò.
;-)
Magari domani ti scoccerò di nuovo.
Grazie ancora
A.
aaa