Détecter le passage de la souris ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Détecter le passage de la souris ?

Message 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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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...
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Ok merci :wink:

Oui j'ai chercher car je sais que quelqu'un avait poser la question mais plus moyen de mettre la main dessus :?
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

De plus en plus fort :wink:, 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

gnozal a écrit :De plus en plus fort :wink:, sans boucle
Pas mal!
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Si c'est comme sur un de mes premier topic après sa sera sans les mains puis sans code :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

De mieu en mieu :P
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

GetDlgCtrlID_(HObjet) : excellent çà, je connaissais pas.

et hop une macro de plus pour ma collec.

Code : Tout sélectionner

Macro GetGadgetId(hObject)
  GetDlgCtrlID_(hObject)
EndMacro
Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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é.
Image
Répondre