Page 1 sur 1
mouse fly over button
Publié : lun. 15/août/2016 21:05
par YvesRossignol
Bonjour, je me demande si il y a une fonction pour vérifier si la souris est au-dessus d'une section de l'écran (un bouton) car j'aimerais montrer une image en fonction de quel bouton est survolé.
Merci de votre aide. J'ai cherché mais j'ai pas trouvé dans le forum
Yves R
Re: mouse fly over button
Publié : lun. 15/août/2016 21:56
par falsam
Cliquer sur un bouton c'est en natif avec PureBasic par contre survoler un bouton n'est pas natif et c'est dommage car on visualise bien que ce bouton nous nargue avec sa surbrillance au moment du survol.
On va se débrouiller avec par exemple des API Windows.
Code : Tout sélectionner
Enumeration window
#mainForm
EndEnumeration
Enumeration gadget
#button1
#button2
EndEnumeration
Declare isMouseOver(window, gadget)
OpenWindow(#mainForm, 0, 0, 400, 150, "Mouse Over", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(#button1, 10, 10, 380, 20,"Button 1")
ButtonGadget(#button2, 10, 40, 380, 20,"Button 2")
Repeat
Event = WindowEvent()
If isMouseOver(#mainform, #button1)
Debug "button1"
EndIf
If isMouseOver(#mainform, #button2)
Debug "button2"
EndIf
Until Event = #PB_Event_CloseWindow
Procedure isMouseOver(window, gadget)
Static currentGadget
GetCursorPos_ (@p.POINT)
ScreenToClient_ (WindowID(window), @p)
overgadget = ChildWindowFromPoint_ (WindowID(window), p\y << 32 + p\x)
If overgadget = GadgetID(gadget) And overgadget <> currentGadget
currentGadget = overgadget
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
■
Mouse over the button or some where over the rainbow ? guess my choice ....
https://www.youtube.com/watch?v=V1bFr2SWP1I
Re: mouse fly over button
Publié : mar. 16/août/2016 7:45
par Zorro
autre technique ,une seule Api , marche aussi sur tout gadgets survolés
Code : Tout sélectionner
; Détecte le passage de la souris au dessus d'un Gadget
; on peut ainsi récupérer son ID ou son Handle
; il faut que l'ID du Gadget commence par 1
; car le message renvoie null s'il n'est pas au dessus un Gadget
; de plus si le gadget est désactivée, il ne sera pas détecté
Declare Callback(WindowID, message, wParam, lParam)
Enumeration
#window
;#String ;ID=1
#Button ;ID=2
#CheckBox ;ID=3
#String
EndEnumeration
;
If OpenWindow(#window,0,0,400,400,"Pure Basic",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowCallback(@Callback())
CreateGadgetList(WindowID(#window))
StringGadget(#String,20, 20,200,20,"Normal StringGadget...")
ButtonGadget(#Button, 20, 60, 200, 20, "Standard Button")
CheckBoxGadget(#CheckBox,20, 100,200,20,"CheckBox standard")
Repeat
EventID.l=WaitWindowEvent(10)
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case 0
EndSelect
Endselect
Until EventID.l=#PB_Event_CloseWindow
EndIf
;
Procedure Callback(WindowID, message, wParam, lParam)
Resultat = #PB_ProcessPureBasicEvents
Select message
Case #WM_SETCURSOR
Debug "Handle= "+Str(wParam)+" , "+"ID= "+Str(GetDlgCtrlID_(wParam))
EndSelect
ProcedureReturn Resultat
EndProcedure
; Epb
Ps : une recherche sur les forums avec le terme "mouse Over" t'aurai apporté moultes réponses
