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
mouse fly over button
-
- Messages : 133
- Inscription : lun. 28/mars/2016 19:09
mouse fly over button
Yves Rossignol
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: mouse fly over button
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.
■ Mouse over the button or some where over the rainbow ? guess my choice ....
https://www.youtube.com/watch?v=V1bFr2SWP1I
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
https://www.youtube.com/watch?v=V1bFr2SWP1I
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: mouse fly over button
autre technique ,une seule Api , marche aussi sur tout gadgets survolés
Ps : une recherche sur les forums avec le terme "mouse Over" t'aurai apporté moultes réponses
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
