Utiliser un curseur perso animé au passage sur un form

thilam

XLDnaute Junior
Bonjour à tous.
J'ai une feuille Excel (2003 SP3) que je voudrais customiser. Je souhaite que lorsque le pointeur se trouve au dessus d'un contrôle donné, le curseur change. On peut faire ça simplement en définissant les propriétés de Mouseicon du contrôle mais comme c'est trop simple je voudrais que le curseur soit animé (.ani).
J'ai trouvé sur le Web des solutions auxquelles je ne comprend rien (je ne suis pas un pro, loin de là). Notamment une que je copie ci-dessous :

Private Declare Function SetClassLongPtr Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal wNewWord As Long) As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Long) As Long
Const GCW_HCURSOR = (-12)

Dim SysCursHandle As Long, Curs2Handle As Long

Private Sub Form_Load()
'Load a cursor from a file
Curs2Handle = LoadCursorFromFile("D:\Mes supers tests\Static 7.cur" )
'Set the button's cursor
SysCursHandle = SetClassLongPtr(Command1.hwnd, GCW_HCURSOR, Curs2Handle)
End Sub

Private Sub Form_Unload(Cancel As Integer)
DestroyCursor Curs2Handle
End Sub


D'après son auteur c'est très simple.
J'ai essayé de l'utiliser (je n'aime pas quand je ne comprend pas) mais ça ne fonctionne pas, j'ai une erreur "Objet requis" sur la ligne du SysCursHandle =...

Dans l'ensemble, le code me parait clair, on remplace le curseur par défaut par un curseur chargé à partir d'un fichier. Ce que je ne comprend pas dans ce code c'est la fonction SetClassLongPtr. A quoi sert elle et qu'est ce que c'est que Command1.hwnd.
Désolé pour ces questions bêtes mais si quelqu'un peut soit m'expliquer comment c'est censé fonctionner ou me donner une autre façon de faire je me coucherai plus intelligent ce soir (comme touts les soirs, en général).
Merci à tous
Th
 

thilam

XLDnaute Junior
Re : Utiliser un curseur perso animé au passage sur un form

MichelXld,
Je ne connais pas bien le fonctionnement du forum, ça veut dire que mon message a été supprimé parceque le code que j'indique n'est pas stable?
Si c'est ça je suis preneur d'une autre solution puisque ce code n'est pas de moi et que je ne le comprend pas.
Pourquoi supprimer le message?
Comment puis-je avoir une réponse à ma question?
Merci
Th
 

MichelXld

XLDnaute Barbatruc
Re : Utiliser un curseur perso animé au passage sur un form

bonjour

Je ne connais pas bien le fonctionnement du forum, ça veut dire que mon message a été supprimé parceque le code que j'indique n'est pas stable?

Non, c'est seulement ma réponse que j'ai supprimé car la macro que je proposait, plantait par moment ... ;o)

bonne journée
michel
 

MichelXld

XLDnaute Barbatruc
Re : Utiliser un curseur perso animé au passage sur un form

Rebonjour,

Sans garantie, tu peux tester cette adaptation :

Code:
Option Explicit

Private Declare Function LoadCursorFromFile Lib _
    "user32" Alias "LoadCursorFromFileA" _
    (ByVal lpFileName As String) As Long

Private Declare Function SetCursor Lib "user32" _
    (ByVal hCursor As Long) As Long

Private Declare Function DestroyCursor Lib "user32" _
    (ByVal hCursor As Long) As Long
 
Dim hwndCursor As Long
 
Private Sub UserForm_MouseMove(ByVal Button As Integer, _
    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    
    
    hwndCursor = LoadCursorFromFile("C:\dossier\fichier.ani")
    If hwndCursor > 0 Then
        SetCursor hwndCursor
        DestroyCursor hwndCursor
    End If
End Sub
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    DestroyCursor hwndCursor
End Sub

Testé sous Excel 2002. Je réessayerai ce soir sour Excel 2007 et qui m'avait gratifié de très beaux plantages hier soir ...


bonne journée
michel
 

thilam

XLDnaute Junior
Re : Utiliser un curseur perso animé au passage sur un form

Ca marche !! Et en plus je comprend pourquoi!
Il y a juste le premier DestroyCursor hwndCursor dont le sens m'échappe.
A priori c'est une instruction qui sert à annuler la personnalisation du curseur alors pourquoi L'utilise-t'on également juste après le SetCursor?
En tout cas un grand merci.
Th
 

thilam

XLDnaute Junior
Re : Utiliser un curseur perso animé au passage sur un form

Question complémentaire à 2 balles: est-il possible de "cacher" un fichier curseur ani dans un classeur excel et de le "loader" avec un LoadCursor ?(afin de permettre que la perso du curseur fonctionne sur n'importe quel poste)
 

MichelXld

XLDnaute Barbatruc
Re : Utiliser un curseur perso animé au passage sur un form

Bonsoir,


Il y a juste le premier DestroyCursor hwndCursor dont le sens m'échappe.
Justement, chez moi l'application plante si cette ligne est omise. Malheureusement ensuite ça nuit à la fluidité du curseur personnalisé ...


est-il possible de "cacher" un fichier curseur ani dans un classeur excel et de le "loader" avec un LoadCursor ?(afin de permettre que la perso du curseur fonctionne sur n'importe quel poste)
Tu peux essayer de le stocker en binaire dans une feuille de calcul, et le recréer sur le pc lors de l'ouverture du userform (je n'ai pas testé pour ce format de fichier) :
Stocker et visualiser des images GIF dans Excel - Club des décideurs et professionnels en Informatique


bonne soirée
michel
 

Discussions similaires

Statistiques des forums

Discussions
312 332
Messages
2 087 362
Membres
103 528
dernier inscrit
maro