mouse fly over button

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

mouse fly over button

Message 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
Yves Rossignol
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: mouse fly over button

Message 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
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%
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: mouse fly over button

Message 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 :)
Répondre