Page 1 sur 1
Détecter le passage de la souris ?
Publié : mer. 19/avr./2006 14:37
par wolfjeremy
Salut,
Comment-est ce que l'on peut faire pour détecter le passage de la souris sur un gadget ?
Merci d'avance pour votre réponse.
Publié : mer. 19/avr./2006 15:47
par Chris
Tu as vérifié dans le forum? Il me semble qu'il y avait un code la dessus. (Pas sur quand même)
Sinon, quand les gadgets sont déclarés dans une énumeration, je fais comme ça.
Code : Tout sélectionner
Enumeration
#Window_0
EndEnumeration
Enumeration
#Button_0
#Button_1
#String_0
#Radio_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 132, 49, 204, 130, "Window 0", #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 5, 5, 195, 25, "Bouton")
ButtonGadget(#Button_1, 5, 35, 195, 25, "Bouton")
StringGadget(#String_0, 5, 65, 195, 25, "String")
OptionGadget(#Radio_0, 5, 95, 195, 30, "Radio")
EndIf
EndIf
EndProcedure
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Static IdGadget
Select uMsg
Case #WM_TIMER
Select idEvent
Case 1
GetCursorPos_(CurPos.POINT)
HObjet = WindowFromPoint_(CurPos\x, CurPos\y)
For i = #Button_0 To #Radio_0 ; Gadgets dans l'ordre ou ils sont énumérés
If HObjet = GadgetID(i) And i <> IdGadget
IdGadget = i : Debug IdGadget
Break
EndIf
Next
EndSelect
EndSelect
EndProcedure
Open_Window_0()
SetTimer_(WindowID(#Window_0), 1, 1, @TimerProc())
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
La boucle For/Next doit suivre l'ordre de l'énumération des gadgets.
Ca vaut ce que ça vaut, mais tant que ça fonctionne...
Publié : mer. 19/avr./2006 15:58
par wolfjeremy
Ok merci
Oui j'ai chercher car je sais que quelqu'un avait poser la question mais plus moyen de mettre la main dessus

Publié : mer. 19/avr./2006 16:10
par gnozal
De plus en plus fort

, sans boucle
Code : Tout sélectionner
Enumeration
#Window_0
EndEnumeration
Enumeration 1
#Button_0
#Button_1
#String_0
#Radio_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 132, 49, 204, 130, "Window 0", #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 5, 5, 195, 25, "Bouton")
ButtonGadget(#Button_1, 5, 35, 195, 25, "Bouton")
StringGadget(#String_0, 5, 65, 195, 25, "String")
OptionGadget(#Radio_0, 5, 95, 195, 30, "Radio")
EndIf
EndIf
EndProcedure
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Static IdGadget
Select uMsg
Case #WM_TIMER
Select idEvent
Case 1
GetCursorPos_(CurPos.POINT)
HObjet = WindowFromPoint_(CurPos\x, CurPos\y)
;For i = #Button_0 To #Radio_0 ; Gadgets dans l'ordre ou ils sont énumérés
; If HObjet = GadgetID(i) And i <> IdGadget
; IdGadget = i : Debug IdGadget
; Break
; EndIf
;Next
i = GetDlgCtrlID_(HObjet) ; ID Purebasic à partir du handle
If i >= #Button_0 And i <= #Radio_0
If i <> IdGadget
IdGadget = i : Debug IdGadget
EndIf
EndIf
EndSelect
EndSelect
EndProcedure
Open_Window_0()
SetTimer_(WindowID(#Window_0), 1, 1, @TimerProc())
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
Publié : mer. 19/avr./2006 16:32
par Chris
gnozal a écrit :De plus en plus fort

, sans boucle
Pas mal!
Publié : mer. 19/avr./2006 16:33
par wolfjeremy
Si c'est comme sur un de mes premier topic après sa sera sans les mains puis sans code

Publié : mer. 19/avr./2006 16:37
par Chris
Ou sans TimerProc()
Code : Tout sélectionner
Enumeration
#Window_0
EndEnumeration
Enumeration 1
#Button_0
#Button_1
#String_0
#Radio_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 132, 49, 204, 130, "Window 0", #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 5, 5, 195, 25, "Bouton")
ButtonGadget(#Button_1, 5, 35, 195, 25, "Bouton")
StringGadget(#String_0, 5, 65, 195, 25, "String")
OptionGadget(#Radio_0, 5, 95, 195, 30, "Radio")
EndIf
EndIf
EndProcedure
Open_Window_0()
Repeat
GetCursorPos_(CurPos.POINT)
HObjet = WindowFromPoint_(CurPos\x, CurPos\y)
i = GetDlgCtrlID_(HObjet) ; ID Purebasic à partir du handle
If (i >= #Button_0 And i <= #Radio_0) And i <> IdGadget
IdGadget = i : Debug IdGadget
EndIf
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
Publié : mer. 19/avr./2006 16:53
par wolfjeremy
De mieu en mieu

Publié : mer. 19/avr./2006 17:54
par Flype
GetDlgCtrlID_(HObjet) : excellent çà, je connaissais pas.
et hop une macro de plus pour ma collec.
Publié : mer. 19/avr./2006 18:03
par Dr. Dri
Le plus simple c'est de lancer la détection sur un wm_mousemove.
@Flype
GetGadgetID ca peut prêter à confusion puisque justement le but n'est pas de récupérer l'ID du gadget mais son numéro.
Dri
Publié : mer. 19/avr./2006 18:50
par Flype
oui c'est vrai mais je me comprends.
pour moi un ID c'est un identifiant, un numéro.
et le pointeur du gadget pour moi c'est un handle ( hQuelquechose )
je comprends les débutants qui se paument avec çà... m'enfin moi çà va chui rodé.