UserControl + curseur
Sinistrus
Messages postés
1010
Date d'inscription
Statut
Membre
Dernière intervention
-
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Salut à tous !
Je sollicite votre aide pour ce bout de code en VB6.
Dans mon appli, j'ai plusieurs UserControl avec lesquels je dois attribuer à chacun un curseur différent.
Cela fonctionne pour le textbox puisqu'il à un curseur "text.cur" mais lorsqu'il s'agit des pictureclip intégré aux usercontrol, le seul élément que je modifie pour avoir supposons un "link.cur" s'attribut à tous les usercontrol qui possèdent des pictureclip.
Comment donner à chaque user control possédent une pictureclip un seul model de curseur ?
Voici mon code en intégrale pour ajouter le curseur à mon appli :
Module:
UserControl:
Sinon, j'ai pensé à intégrer dans le load de mon programme qui devrait recevoir cet "ocx" dans le cas ou la première méthode ne fonctionne pas, de changer les curseur à partir de la gestion de la souris dans le système même et de remettre en place les curseurs standards de windows... mais là je beug, je ne sais pas comment faire...
Pouvez-vous m'aider pour l'une des deux solutions svp ?
Merci
Je sollicite votre aide pour ce bout de code en VB6.
Dans mon appli, j'ai plusieurs UserControl avec lesquels je dois attribuer à chacun un curseur différent.
Cela fonctionne pour le textbox puisqu'il à un curseur "text.cur" mais lorsqu'il s'agit des pictureclip intégré aux usercontrol, le seul élément que je modifie pour avoir supposons un "link.cur" s'attribut à tous les usercontrol qui possèdent des pictureclip.
Comment donner à chaque user control possédent une pictureclip un seul model de curseur ?
Voici mon code en intégrale pour ajouter le curseur à mon appli :
Module:
Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName 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 Public Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Const GCW_HCURSOR = (-12) Public Const IDC_WAIT = 32514& Dim hSysCurs As Long, hCurs As Long
UserControl:
Private Sub UserControl_WriteProperties(PropBag As PropertyBag) hCurs = LoadCursorFromFile(App.Path & "\Curseurs\Text_Select.cur") hSysCurs = SetClassLong(UserControl.hwnd, GCW_HCURSOR, hCurs) End Sub Private Sub UserControl_ReadProperties(PropBag As PropertyBag) hCurs = LoadCursorFromFile(App.Path & "\Curseurs\Text_Select.cur") hSysCurs = SetClassLong(UserControl.hwnd, GCW_HCURSOR, hCurs) End Sub Private Sub UserControl_Terminate() SetClassLong UserControl.hwnd, GCW_HCURSOR, hSysCurs DestroyCursor hCurs End Sub
Sinon, j'ai pensé à intégrer dans le load de mon programme qui devrait recevoir cet "ocx" dans le cas ou la première méthode ne fonctionne pas, de changer les curseur à partir de la gestion de la souris dans le système même et de remettre en place les curseurs standards de windows... mais là je beug, je ne sais pas comment faire...
Pouvez-vous m'aider pour l'une des deux solutions svp ?
Merci
A voir également:
- UserControl + curseur
- Comment faire apparaître le curseur sans souris - Guide
- Curseur bloqué ordinateur portable - Guide
- Curseur en arabe - Forum Windows
- Curseur souris disparu pc portable acer ✓ - Forum souris / Touchpad
- Curseur blanc google doc ✓ - Forum Google Docs
9 réponses
Bonjour,
Si tu veux que chaque OCX ai son curseur perso tu doit mettre cela dans une propriété, ce sera à l'utilisateur de choisir sont curseur.
De toute façon, ce n'est certainement pas dans le Read/WritePropertie qu'il faut faire appel à des API mais dans Initialize.
Éventuellement faire un choix de curseurs avec Rnd
Si tu veux que chaque OCX ai son curseur perso tu doit mettre cela dans une propriété, ce sera à l'utilisateur de choisir sont curseur.
De toute façon, ce n'est certainement pas dans le Read/WritePropertie qu'il faut faire appel à des API mais dans Initialize.
Éventuellement faire un choix de curseurs avec Rnd
Voila comme je vois la chose...
Tu va avoir une propriété curseur dans l'application, tu la change et elle sera mémorisée.
Quand je fais un truc comme ça je change le nom des fichiers en finissant par le N° comme par exemple
Curseur0.cur, Curseur1.cur, Curseur2.cur
alors en place de faire un select j'initialise directement St
St = "Curseur" & mNvCurs & ".cur"
J'ai fais ça vite fais, pas tester juste un pilote.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Public Enum ChoixCurseur
Croix
Plat
Autre
Paysage
Lettre
End Enum
Dim mNvCurs As ChoixCurseur
Private Sub UserControl_Initialize()
ChangeCurseur
End Sub
Private Property Let Curseur(ByVal NvCurs As ChoixCurseur)
If mNvCurs <> NvCurs Then
mNvCurs = NvCurs
ChangeCurseur
PropertyChanged "Curseur"
End If
End Property
Private Sub ChangeCurseur()
Dim St As String
Dim hCurs As Long, hSysCurs As Long
Select Case mNvCurs
Case 0: St = "NomFichier Croix.cur"
Case 1: St = "NomFichier Plat.cur"
Case 2: St = "NomFichier Autre.cur"
Case 3: St = "NomFichier Paysage.cur"
Case 4: St = "NomFichier Lettre.cur"
End Select
hCurs = LoadCursorFromFile(App.Path & "\Curseurs\" & St)
hSysCurs = SetClassLong(UserControl.hWnd, GCW_HCURSOR, hCurs)
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
mNvCurs = PropBag.ReadProperty("Curseur", 1)
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("Curseur", mNvCurs, 1)
End Sub
Tu va avoir une propriété curseur dans l'application, tu la change et elle sera mémorisée.
Quand je fais un truc comme ça je change le nom des fichiers en finissant par le N° comme par exemple
Curseur0.cur, Curseur1.cur, Curseur2.cur
alors en place de faire un select j'initialise directement St
St = "Curseur" & mNvCurs & ".cur"
J'ai fais ça vite fais, pas tester juste un pilote.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Salut lermite222 et merci pour ta réponse et le temps que tu donne.
J'ai essayé ton option et pareil, lorsque je met ton code dans un seul usercontrol, il prends pour la généralité... et l'on ne peux pas avoir accès à la propriété Curseur (mais là c'est réglé.)
Le beug du code est qu'il ne change pas la propriété du curseur. Il reste figé sur la première option "Croix".
Reste à savoir s'il arrive à changer est-ce qu'il prendra aussi pour la généralité des autres usercontrol ?
J'ai essayé ton option et pareil, lorsque je met ton code dans un seul usercontrol, il prends pour la généralité... et l'on ne peux pas avoir accès à la propriété Curseur (mais là c'est réglé.)
Le beug du code est qu'il ne change pas la propriété du curseur. Il reste figé sur la première option "Croix".
Reste à savoir s'il arrive à changer est-ce qu'il prendra aussi pour la généralité des autres usercontrol ?
Bon behh désolé, je n'avais plus fais d'OCX depuis que j'ai Vista et... malheureusement ÇA VA PLUS, les mécanismes de l'OCX ne fonctionne plus. J'avais déjà du modifier certain OCX créer sous XP pour qu'il fonctionne sous vista.
Faut oublier de créer des OCX sous vista et probablement encore moins sous W7.
J'ai tout essayé, sur un seul UF ça pourrait encore aller tant bien que mal mais dés qu'on en met plusieurs tout foire, probablement un mauvais adressage des mémoires probag.
A+
Faut oublier de créer des OCX sous vista et probablement encore moins sous W7.
J'ai tout essayé, sur un seul UF ça pourrait encore aller tant bien que mal mais dés qu'on en met plusieurs tout foire, probablement un mauvais adressage des mémoires probag.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci mon vieux.
Par contre j'ai toujours travaillé avec cet OCX depuis XP en passant par Vista et Win7, je n'ai jamais eu de problème avec mon "bébé".
Là vu que je souhaite l'améliorer, lui donner un coup de peigne fin, je beug sur cette option.
Merci pour ton aide en tout cas, mais si tu as une astuce pour activer un modèle de style de curseur dans la liste des pointeurs du panneau souris (panneau de configuration), je penses qu'au load ça sera super de l'activer et le désactiver à la fermeture du programme...
Par contre j'ai toujours travaillé avec cet OCX depuis XP en passant par Vista et Win7, je n'ai jamais eu de problème avec mon "bébé".
Là vu que je souhaite l'améliorer, lui donner un coup de peigne fin, je beug sur cette option.
Merci pour ton aide en tout cas, mais si tu as une astuce pour activer un modèle de style de curseur dans la liste des pointeurs du panneau souris (panneau de configuration), je penses qu'au load ça sera super de l'activer et le désactiver à la fermeture du programme...
Salut le jeune.
C'est comme je dis plus haut, les OCX qui ont été développés sur XP fonctionnent sur vista à quelque exceptions près. Certaine modif sont prises en compte
Ex: Sur cet OCX j'ai du rediriger l'accès au resize et ça a fonctionner mais je n'ai rien modifier dans le Probag ni dans les propriétés.
Rappel toi.. quand tu installe VB6 sur vista tu a l'alerte "problème de compatibilité connue" ou quelque chose comme ça. (Suis ptét vieux mais j'ai encore un peu de mémoire)
Tu peu ajouter un pointeur mais pas en couleur.
Edit : Et ça fonctionne très bien.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
C'est comme je dis plus haut, les OCX qui ont été développés sur XP fonctionnent sur vista à quelque exceptions près. Certaine modif sont prises en compte
Ex: Sur cet OCX j'ai du rediriger l'accès au resize et ça a fonctionner mais je n'ai rien modifier dans le Probag ni dans les propriétés.
Rappel toi.. quand tu installe VB6 sur vista tu a l'alerte "problème de compatibilité connue" ou quelque chose comme ça. (Suis ptét vieux mais j'ai encore un peu de mémoire)
Tu peu ajouter un pointeur mais pas en couleur.
Edit : Et ça fonctionne très bien.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Lol, on dirais que mon mot "vieux" t'as marqué... désolé, c'est signe de respect pour dire "sage" dans mon pays :D
Je comprends le problème de VB6 et j'ai converti auparavant en 16 bit les curseurs... mais c'est merdique.
Y a t-il une option pour activer dans la liste des pointeurs, les pointeurs voulus ?
J4ai copié tous mes pointeurs dans le dossier curseur et enregistré le style sous "Oxygen_curseur"
Je souhaiterai les activer depuis VB6 et les désactiver en quittant le logiciel...
As tu une option pour cela ?
Je comprends le problème de VB6 et j'ai converti auparavant en 16 bit les curseurs... mais c'est merdique.
Y a t-il une option pour activer dans la liste des pointeurs, les pointeurs voulus ?
J4ai copié tous mes pointeurs dans le dossier curseur et enregistré le style sous "Oxygen_curseur"
Je souhaiterai les activer depuis VB6 et les désactiver en quittant le logiciel...
As tu une option pour cela ?
Comme j'ai dis, Oui, mais en noir et blanc, ça t'intéresse ?
Supprime l'API.
Si tu est parvenu à avoir la propriété Curseur ce code fonctionne
J'ai tester sur des pictures elles ont chacune un curseur différent.
A+
EDIT : Fonctionne avec tout les curseurs. pas besoin de les avoir en 16
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Supprime l'API.
Si tu est parvenu à avoir la propriété Curseur ce code fonctionne
Private Sub ChangeCurseur()
Dim St As String
'adapter le chemin
St = "C:\Myimages2\Curseur\LN" & mCurs + 100 & ".cur"
UserControl.MouseIcon = LoadPicture(St)
UserControl.MousePointer = 99
End Sub
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
mCurs = PropBag.ReadProperty("Curseur", 1)
ChangeCurseur
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty("Curseur", mCurs, 1)
End Sub
Public Property Get Curseur() As ChoixCurseur
Curseur = mCurs
End Property
Public Property Let Curseur(ByVal NvCurs As ChoixCurseur)
If mCurs <> NvCurs Then
mCurs = NvCurs
ChangeCurseur
End If
End Property
J'ai tester sur des pictures elles ont chacune un curseur différent.
A+
EDIT : Fonctionne avec tout les curseurs. pas besoin de les avoir en 16
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Je vois... non le blanc noir ne me vas pas... il rends toute l'icone noir. Enfin, non, il me le faut en couleur...
Je vais pencher un peux plus sur la première solution. Elle a fonctionnée, mais partage sa propriété... là est le problème.
Je vais pencher un peux plus sur la première solution. Elle a fonctionnée, mais partage sa propriété... là est le problème.
J'ai fouillé un peux pour voir la base de registre, lorsque tu active un kit de curseur, c'est la même ligne qui change, ce n'est pas genre il y a plusieurs et l'on choisis un mode non... La seule ligne est éditable.
Si lorsqu'on ouvre le logiciel on change la valeur du registre, il ne prendra pas instantanément... or si l'on change en mode silencieux le main.cpl et activons le style souhaité, là je pense qu'on aura gagné un point !
Tu penses possible de changer en mode silencieux le style du pointeur et le ramener à son point initial en quittant le logiciel ?
Si lorsqu'on ouvre le logiciel on change la valeur du registre, il ne prendra pas instantanément... or si l'on change en mode silencieux le main.cpl et activons le style souhaité, là je pense qu'on aura gagné un point !
Tu penses possible de changer en mode silencieux le style du pointeur et le ramener à son point initial en quittant le logiciel ?