Changer le curseur de la souris au survol d'un Gadget

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Changer le curseur de la souris au survol d'un Gadget

Message par Le Soldat Inconnu »

Un petit code fait à partir d'un code de NetMaestro disponible ici :
http://www.purebasic.fr/english/viewtop ... 91#p329298

Ce code permettait de masquer le curseur au dessus d'un gadget.
J'ai repris l'idée pour, non plus masquer, mais modifier le curseur quand on survole un gadget

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4.50
;
; Explication du programme :
; Changer le curseur de la souris au dessus d'un gadget

Procedure SetGadgetCursor_SubClassProc(hwnd, msg, wparam, lparam) 
	Protected oldproc, Cursor
	oldproc = GetProp_(hwnd, "oldproc") 
	
	Select msg 
		Case #WM_NCDESTROY 
			RemoveProp_(hwnd, "oldproc") 
			RemoveProp_(hwnd, "cursor") 
			
		Case #WM_SETCURSOR
			Cursor = GetProp_(hwnd, "cursor") 
			SetCursor_(Cursor)
			ProcedureReturn 0 
			
	EndSelect    
	ProcedureReturn CallWindowProc_(oldproc, hwnd, msg, wparam, lparam) 
EndProcedure 
Procedure SetGadgetCursor(Gadget, Cursor) ; Change le curseur de la souris au dessus d'un Gadget
	If GetProp_(GadgetID(Gadget), "cursor")
		RemoveProp_(GadgetID(Gadget), "cursor") 
	EndIf
	SetProp_(GadgetID(Gadget), "cursor", Cursor)
	If GetProp_(GadgetID(Gadget), "oldproc") = 0
		SetProp_(GadgetID(Gadget), "oldproc", SetWindowLongPtr_(GadgetID(Gadget), #GWL_WNDPROC, @SetGadgetCursor_SubClassProc())) 
	EndIf
	SendMessage_(GadgetID(Gadget), #WM_SETCURSOR , 0, 0)
EndProcedure




Enumeration
	#Bouton
EndEnumeration
; Valeurs possibles pour le curseur :
#IDC_ARROW = 32512 ; la flèche (le curseur normal)
#IDC_IBEAM = 32513 ; curseur sélection de texte
#IDC_UPARROW = 32516 ; flèche qui pointe vers le haut
#IDC_APPSTARTING = 32650 ; curseur attente (flèche + sablier)
#IDC_WAIT = 32514 ; curseur occupé (sablier)
#IDC_CROSS = 32515 ; curseur précision de la sélection (croix)
#IDC_SIZENWSE = 32642 ; curseur de dimensionnment, pointe le NordOuest et le SudEst
#IDC_SIZENESW = 32643 ; curseur de dimensionnment, pointe le NE et le SO
#IDC_SIZEWE = 32644 ; curseur de dimensionnment, pointe le E et le O
#IDC_SIZENS = 32645 ; curseur de dimensionnment, pointe le N et le S
#IDC_SIZEALL = 32646 ; curseur de déplacement, pointe le N, S, E et O
#IDC_HELP = 32651 ; curseur aide
#IDC_HAND = 32649 ; curseur main
#IDC_NO = 32648 ; curseur "interdit" (panneau d'interdiction)

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "SetGadgetCursor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
  End
EndIf

ButtonGadget(#Bouton, 20, 20, 128, 128, "Nouveau curseur")

Curseur = LoadCursor_(0, #IDC_HAND) ; Charge le curseur
SetGadgetCursor(#Bouton, Curseur) ; Applique le curseur au gadget

Repeat
  Event = WaitWindowEvent()
  
  Select Event
		Case #PB_Event_Menu
      Select EventMenu() ; Menus
          
			EndSelect
      
		Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
				Case #Bouton
					DestroyCursor_(Curseur) ; Supprime l'ancien curseur
					Curseur = LoadCursor_(0, #IDC_WAIT) ; Charge le curseur
					SetGadgetCursor(#Bouton, Curseur) ; Applique le curseur au gadget
			EndSelect
	EndSelect
  
Until Event = #PB_Event_CloseWindow

DestroyCursor_(Curseur) ; Supprime le curseur
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Changer le curseur de la souris au survol d'un Gadget

Message par Ar-S »

Merci ! bien cool ça.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Changer le curseur de la souris au survol d'un Gadget

Message par dayvid »

Ah oui :o

ça c'est drollement bien foutue :)
merci LSI, moi ça va me servir :P
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Changer le curseur de la souris au survol d'un Gadget

Message par Kwai chang caine »

Parfait comme dab, merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Changer le curseur de la souris au survol d'un Gadget

Message par Ar-S »

Je n'ai pas réussi à le faire fonctionner avec un MenuItem() idem pour le CreateImageMenu()
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Changer le curseur de la souris au survol d'un Gadget

Message par Le Soldat Inconnu »

je ne pense pas que ça puisse fonctionner avec des menus
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Changer le curseur de la souris au survol d'un Gadget

Message par Ar-S »

Arrrf bien dommage ! :?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Changer le curseur de la souris au survol d'un Gadget

Message par nico »

Ar-S a écrit :Je n'ai pas réussi à le faire fonctionner avec un MenuItem() idem pour le CreateImageMenu()

t'as un exemple de code que j'y regarde d'un peu plus près.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Changer le curseur de la souris au survol d'un Gadget

Message par Ar-S »

oui je te montre ça des que je rentre chez moi (d'ici ce soir je pense)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Changer le curseur de la souris au survol d'un Gadget

Message par venom »

ça ne fonctionne pas chez moi, des que je clique sur le buttongadget, j'ai le petit cercle d'attente de windows qui se met et rien d'autre.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Changer le curseur de la souris au survol d'un Gadget

Message par nico »

Oui, c'est ce que fait le code. :lol:
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Changer le curseur de la souris au survol d'un Gadget

Message par venom »

:oops: autant pour moi, quel bouler :D
j'ai penser que le compilo avait planter :wink:





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Changer le curseur de la souris au survol d'un Gadget

Message par nico »

Il m'est déjà arriver un truc dans le genre aussi, c'est le problème quand on exécute sans réfléchir. :lol:
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Changer le curseur de la souris au survol d'un Gadget

Message par Shadow »

Déterrage de sujet à la pelle...
Le code de LSI fonctionne encore pour changer le curseur de la souris au survol d'un Gadget.

Mais y à t-il plus simple, plus portable ?
C'est quand même très compliquer tous ça pour changer le curseur de la souris...
Au moins ça fonctionne très bien mais bon ya t-il d'autre moyen plus simple ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Changer le curseur de la souris au survol d'un Gadget

Message par falsam »

Plutôt simple à comprendre ce code pourtant.

■ Une version plus simple dérivée du code précédent

Code : Tout sélectionner

hWnd = OpenWindow(0, 0, 0, 500, 400, "Change Pointer", #PB_Window_SystemMenu)
hBtn = ButtonGadget(0, 400, 20, 80, 22, "Button")

SetClassLong_(hWnd, #GCL_HCURSOR, LoadCursor_(0, #IDC_NO))
SetClassLong_(hBtn, #GCL_HCURSOR, LoadCursor_(0, #IDC_HAND))
 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
A toi de te souvenir des constantes #idc_??????? sur ce lien
:arrow: https://msdn.microsoft.com/fr-fr/librar ... s.85).aspx
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre