Pointeur souris animé avec VB6 [Résolu]

cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 29 juin 2012 à 20:24 - Dernière réponse : cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention
- 2 juil. 2012 à 14:38
Bonjour tous,
J'ai déjà suivi un tas d'exemple pour un curseur souris animé mais je constate qu'aucun ne fonctionne.
L'API SetClassLongA ne réagit pas à ses paramètres bien que divers sources disent que cela fonctionne.
Je précise que je suis sous Windows Vista.
Faut-il employer une autre API avec Vista.
Je précise aussi que j'ai tenté le coup sous admin.
Cela devait aussi fonctionner sous W7.
Merci d'avance de vos conseils éclairer.
A+
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 30 juin 2012 à 14:13
3
Merci
Re,
En fait ma sub fonctionnait très bien pour des curseurs couleur, je détruit le handel directement mais l'image reste dans la mémoire.
Je n'ai donc pas chercher plus loin quand j'ai créé cette sub, ce n'est qu'avec la recherche pour les curseurs animés que je butais.
Résolu, fallait juste mettre la dernière ligne un peu plus haut, le handel doit rester disponnible pour les curseurs animés.
Et pour ceux que ça pourrait intérresser..
Ca fonctionne impec et sans planter l'appli.
Public Sub ChangeCurseur(mHwnd As Long, Curs As Integer)
Dim SysCursHandle As Long
Dim CursHandel As Long
Dim F As String
    'Détruit le curseur précédant
    CursHandel = GetClassLong(mHwnd, GCW_HCURSOR)
    DestroyCursor CursHandel
    'De 1 à 29 curseurs couleurs, au dessus, curseur animé
    F = CheminCurs & "Cur" & Curs & IIf(Curs < 30, ".cur", ".ani")
    CursHandel = LoadCursorFromFile(F)
    SysCursHandle = SetClassLong(mHwnd, GCW_HCURSOR, CursHandel)
End Sub

Pour info : ça me permet de faire "vivre" le curseur souris en fonction des circonstances.
A+

Merci cs_lermite222 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_lermite222
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 29 juin 2012 à 20:34
0
Merci
Bonjour,
Commence par nous montrer quel code tu as utilisé !
Quant à Win 7 : en combien de bits ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 29 juin 2012 à 23:07
0
Merci
Salut Ucfoutu et merci de ton intérêt.
Je me sert de...
Public Sub ChangeCurseur(mHwnd As Long, Curs As Integer)
Dim SysCursHandle As Long, CursHandel As Long
Dim Ret As Long
    If Curs = -1 Then
    CursHandel = LoadCursorFromFile(CheminCurs & "aero_busy_l.ani")

    Else
    CursHandel = LoadCursorFromFile(CheminCurs & "LN" & Curs & ".cur")
    End If
    SysCursHandle = SetClassLongPtr(mHwnd, GCW_HCURSOR, CursHandel)
    DestroyCursor CursHandel
End Sub


Depuis un bon bout de temps mais je voulais avoir un cursuer annimé (genre le truc qui tourne )
Bien entendu les fichiers curs se trouvent dans le répertoire spécifier.
J'ai aussi essayer
***********************************************************************
' trouver sur http://www.cuisinaud.com/tip.php?id=3&num=6
'Auteur : W.Ploivy
'-----------------------------------------------------------------------
Sub ChargeAniCur(hwnd As Long, AniFichier As String, hAniCursor As Long, _
    VieuxCurseur As Long)
    Dim hAniCusor As Long, r As Long
    
    'Charge le pointeur animé et lui affecte un handle
    hAniCursor = LoadCursorFromFile(AniFichier)
    If hAniCursor <> 0 Then
        'Mémorise le pointeur de souris courant
        VieuxCurseur = GetClassLong(hwnd, GCL_HCURSOR)
        'Modifie le pointeur de souris via le handle de la classe de la fenêtre
        r = SetClassLong(hwnd, GCL_HCURSOR, hAniCursor)
    End If
End Sub 

Je me demande si en finalié" le curseur "animé" est possible en <VBV6>
A+
Commenter la réponse de cs_lermite222
cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 29 juin 2012 à 23:21
0
Merci
Re,
Précision,

En w7 j'ai un PC en 32 et un en 64 bits.
Merci d'avance de vos conseils éclairés.
Commenter la réponse de cs_lermite222
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 juin 2012 à 07:09
0
Merci
Ouais...
Je crois que je vais te laisser là (avec d'excellentes raisons de t'abandonner)
Il est en effet bien trop manifeste que tu te contentes de "ramasser" ici et là sans comprendre ce que tu "ramasses".
La moins grave raison de mon abandon (je dis bien la moins grave) ?
Voir que tu "détruis" un curseur que tu n'as pas créé (ton premier code).
Bonne chance.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 juin 2012 à 08:28
0
Merci
Juste quelques indications et conseils, tout de même :
- il est relativement assez facile de modifier le curseur (y compris animé et en couleurs) pour tout le système. Assez dangereux, tout de même, si interruption brutale de l'appli (donc même si tu as prévu un rétablissement en quittant ton appli)
- il est mille fois moins aisé de ne le faire que pour un/des contrôles particulier(s) uniquement
- il est très délicat et assez risqué d'utiliser la fonction SetClassLongPtr de l'Api de Windows (une erreur et tu peux modifier des paramètres fondamentaux. Que tu prennes ce risque sur ta seule machine, passe encore... mais que tu "distribues" ... NON !)
Ce que j'ai "vu" de tes méthodes/démarches et de tes connaissances est de nature (c'est évident) à me dissuader de t'accompagner dans cette voie. Je ne veux pas partager une telle responsabilité.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 30 juin 2012 à 11:17
0
Merci
Salut Ucfoutu,
Humm, je vois que tu change pas et que tu est toujours aussi rustre et que tu te prend pour le nombril du monde avec la science infuse.
Et c'est plutôt toi qui à rien compris ChangeCurseur fonctionne parfaitement depuis plusieurs années et contrairement aux dire de ta grande connaissance, sans aucun plantage.
Je veux juste y ajouter un curseur animé.

PS: quand je pose une question j'aimerais que Dieu n'intervienne pas, il fait fuire tout les saints.
Commenter la réponse de cs_lermite222
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 juin 2012 à 11:29
0
Merci
Ah bon !
Relis ce que j'ai écrit, donc !
C'est bien de curseurs animés que je parle !
Et pour des curseurs simples, même pas besoin d'une fonction de l'Api ! Il suffit de leur substituer une icône de son choix (fabriquée ou existante).
Rustre, dis-tu ?
OK
Bonne chance.
Message à tous les "saints" : je vous invite à aider lermite222.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 juin 2012 à 13:19
0
Merci
Maintenant : mais j'insiste sur ce qu_e j'ai dit plus haut, à savoir (rappel) :
- il est relativement assez facile de modifier le curseur (y compris animé et en couleurs) pour tout le système. Assez dangereux, tout de même, si interruption brutale de l'appli (donc même si tu as prévu un rétablissement en quittant ton appli)

1) les téméraires trouveront vite comment "contourner" le problème en conjuguant avec le MouseMove ou (encore mieux) en "kookant" pour déterminer à quel moment on ne survole plus un contrôle (ou un form). Et ils attribueront alors le "nouveau curseur" (y compris animé) au système pendant qu'est survolé un contrôle et le rétabliront en cessant ce survol. Ils s'exposeront toutefois nécessairement au risque dénoncé dans la citation plus haut.
2) les plus téméraires joueront avec la fonction SetClassLongPtr. A ceux-là, je dis : faites très attention à ce que vous faites. Lisez d'abord attentivement MSDN à propos de cette fonction. Gardez à l'esprit, entre autres, que si vous utilisez par exemple l'index GCLP_WNDPROC, vous déclenchez un sous-classement de la fenêtre. Je dis bien "entre autres" et "par exemple". Agissez donc avec la plus grande prudence et le plus grand soin.
Voilà voilà.
Amitiés et mes encouragements à ceux qui sauront faire à la fois preuve d'audace et de sagesse.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
NHenry 14262 Messages postés vendredi 14 mars 2003Date d'inscription 22 septembre 2018 Dernière intervention - 30 juin 2012 à 13:22
0
Merci
Bonjour,

Ucfoutu a raison, changer les paramètre systèmes a tendance à décourager les utilisateurs.

Google a pas mal d'idée :
http://www.google.fr/...

Mais apparemment, VB6 n'offre pas beaucoup d'autres alternatives.
Un conseil qui a été posté parmi quelques liens est de ne pas dépasser 256 couleurs.

Sinon, je n'ai pas de curseur animés sur ma machine (et je n'en cherches pas), donc je ne pourrais t'en dire beaucoup plus.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 30 juin 2012 à 14:29
0
Merci
Bonjour NHenry,
tu dis,
changer les paramètres systèmes a tendance à décourager les utilisateurs.

Je te ferais remarquer que ça ne change rien au système, cela s'adresse juste à la configuration du détenteur du hwnd.

Le seul risque éventuel est de planter l'appli et certainement pas le système.
Mais quand le curseur précédant est détruit, ces risques sont null.
A+
Commenter la réponse de cs_lermite222
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 juin 2012 à 14:56
0
Merci
Ces lignes :
'Détruit le curseur précédant
CursHandel = GetClassLong(mHwnd, GCW_HCURSOR)
DestroyCursor CursHandel

ne servent à rien
Et je t'ai parlé plus haut de DestroyCursor. On ne détruit que ce que l'on a créé et cette function ne peut détruire qu'un curseur créé à l'aide de CreateCursor.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 30 juin 2012 à 16:48
0
Merci
Fais maintenant la petite expérience suivante :
3 boutons de commande sur ton form et ce code au click du seul bouton de commande command2.
Private Sub Command2_Click()
  ChangeCurseur Command1.hwnd
End Sub

et ce code dans un modula .bas
Public Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Public Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Long) As Long
Declare Function GetClassLong Lib "user32" Alias "GetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Const GCW_HCURSOR = (-12)
Public Sub ChangeCurseur(mHwnd As Long)
Dim SysCursHandle As Long
Dim CursHandel As Long
Dim F As String
    'Détruit le curseur précédant
    CursHandel = GetClassLong(mHwnd, GCW_HCURSOR)
    DestroyCursor CursHandel
    'De 1 à 29 curseurs couleurs, au dessus, curseur animé
    F = "C:\WINDOWS\Cursors\banana.ani" '====>> ou celui que tu veux
    CursHandel = LoadCursorFromFile(F)
    SysCursHandle = SetClassLong(mHwnd, GCW_HCURSOR, CursHandel)
End Sub

clique sur command2
va ensuite voir ce qui se passe en survolant n'importe lequel des trois boutons de commande. Tiens donc.
Pire : sors du mode exécution et relance à nouveau. Ne clique cette fois-ci pas command2. contente-toi de survoler d'emblée tes boutons (même classe) ===>> regarde.
T'as pas touché au système ? T'es sûr ?
Explication : tu as lié un curseur à un handle. Dans la foulée : les handles de même classe de l'appli en cours ont été touchés.
Quand tu sors du mode exécution et reviens ===>> tu as toutes les chances de retrouver les mêmes identificateur de handle ===>> et donc rebelote avec le dernier curseur.
Il te reste donc à espérer que nul fenêtre ne se verra un jour attribuer par hasard un identificateur identique.
Il est par contre clair que si tu crées l'exe et recommence l'opération décrite plus haut :
1) les trois boutons recevront la banane
2) si tu quittes et relance : plus de banane. Pourquoi ? parce que plus les mêmes identificateurs (du moins pour cette fois-ci). Mais un jour, quand par malheur le système attribuera
à une fenêtre l'un de ces identifuicateurs ===>> cette fenêtre aura la banane et l'utilisateur se demùandera d'où elle est venue ! S'il est quelque peu perspicace, il découvrira tôt ou tard le pot aux roses et tu te "feras appeler Arthur" !

Voilà.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 1 juil. 2012 à 19:03
0
Merci
Salut dieu (sans majuscule) FOUT MOI LA PAIX
Commenter la réponse de cs_lermite222
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juil. 2012 à 19:10
0
Merci
A toi, oui,je veux bien ! mais voilà :
cette discussion, sur ce forum, est lue par tous et je tiens à ce que ceux qui pourraient être "séduits" par la solution montrée sachent tout des aboutissants auxquels ils s'exposent, hein ...
Bref ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
NHenry 14262 Messages postés vendredi 14 mars 2003Date d'inscription 22 septembre 2018 Dernière intervention - 1 juil. 2012 à 20:41
0
Merci
Bonjour,

Merci de vous calmer, si le problème est résolu, merci d'éviter les polémiques et autre troll.

Je pense que la précision qu'a apporté Ufcoutu peut être utile à d'autres lecteurs.

Mais pas la peine de s'énerver.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 juil. 2012 à 21:09
0
Merci
C'est entendu, NHenry.
Je pense que tu as parfaitement raison.
L'essentiel reste pour moi que les futurs lecteurs de cette discussion sachent où ils vont. Le reste est ensuite leur choix .



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
cs_lermite222 500 Messages postés jeudi 5 avril 2007Date d'inscription 2 juillet 2012 Dernière intervention - 2 juil. 2012 à 14:38
0
Merci
Re,
Entendu également NHenry,
Si les "visiteurs" teste ma sub et que ça plante et beh y dirons.. ce lermie quel con.
Et si ça plante pas y dirons.....
A bon entendeur.
Commenter la réponse de cs_lermite222

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.