variante de "WindowMouseX()"

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

variante de "WindowMouseX()"

Message par GeBonet »

Bonjour,
Autre forme d'appréhender la position de la souris... Sans API !

Code : Tout sélectionner

; -------------------------------------------------------------------------
; Positions x, y par rapport à la fenêtre * ou variante de "WindowMouseX()"
; -------------------------------------------------------------------------
Enumeration 
  #Gadget0
  #Gadget1
EndEnumeration
;
Global gs_windowmousedx.i, gs_windowmousedy.i
;
; *** retour des coordonnées de la souris par rapport à la fenêtre (Dans ou dehors)
;
; "windowmouseX normale()" donne "-1" pour toute position en dehors de la fenêtre, et donne 
; une position par rapport à la l'intérieur de la fenêtre intérieure, peu importe si la souris
; est dans ou en dehors de la fenêtre
;
Procedure.i gs_windowmousex(windownr.i) ; Retourne X relatif de la souris
	Protected wmx.i, dmx.i
	;
	wmx = WindowMouseX(windownr)
	dmx = DesktopMouseX()
	If wmx >= 0
		gs_windowmousedx = dmx-wmx
	EndIf
	ProcedureReturn DesktopMouseX()-gs_windowmousedx                  
EndProcedure

Procedure.i gs_windowmousey(windownr.i)  ; Retourne Y relatif de la souris
	Protected wmy.i, dmy.i
	;
	wmy = WindowMouseY(windownr)
	dmy = DesktopMouseY()
	If wmy >= 0
		gs_windowmousedy = dmy-wmy
	EndIf
	ProcedureReturn DesktopMouseY()-gs_windowmousedy                  
	
EndProcedure
;-------------------------------------------------------
; Exemple : 
;-------------------------------------------------------
MaxW=600:MaxH=400

ValOptions = 0  
  ValOptions | #PB_Window_SizeGadget    : ValOptions | #PB_Window_MinimizeGadget 
  ValOptions | #PB_Window_MaximizeGadget:ValOptions | #PB_Window_SystemMenu      
  ValOptions | #PB_Window_ScreenCentered;:ValOptions | #PB_Window_TitleBar
  
If OpenWindow(0,10,50,MaxW,MaxH,"PROGENE V 1.1 PB 4.5 Aout 2010 TEST",ValOptions)
; If OpenWindow(0,10,10,300,200," Essais souris ",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
  
  TextGadget(#Gadget0,15,240,50,20,"C'est Ceci ")
  StringGadget(#Gadget1, 15,270,MaxW-30,20,"")
			
	Repeat 
	  iEvent = WaitWindowEvent()
	  x=gs_windowmousex(windownr.i)
	  y=gs_windowmousey(windownr.i):Text$=""
	  
	  If x>MaxW:Text$="En dehors a droite ":EndIf
	  If y>MaxH::Text$+"En dehors en dessous ":EndIf
	  If x<0:Text$="En dehors a Gauche ":EndIf
	  If y<0:Text$+"En dehors au dessus ":EndIf
	  
	  SetGadgetText(#Gadget1,Text$+Str(x)+" : "+Str(y))	      
		Select iEvent            
			Case #PB_Event_Gadget
			  Select EventGadget()
			    Case #PB_Event_CloseWindow    
		        Break 1  
				EndSelect
		EndSelect        
	Until iEvent = #PB_Event_CloseWindow  
EndIf

End
Origine du Code : blueznl...
Ça peux aussi servir :wink:
A++
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: variante de "WindowMouseX()"

Message par Le Soldat Inconnu »

Disons que le code comporte une petite erreur :)

c'est pas

Code : Tout sélectionner

x=gs_windowmousex(windownr.i) 
mais

Code : Tout sélectionner

x=gs_windowmousex(0) 
qu'il faut utiliser. De même pour les y.

Sinon, j'ai également corriger le problème de scintillement (du moins sous XP)

Code : Tout sélectionner

; -------------------------------------------------------------------------
; Positions x, y par rapport à la fenêtre * ou variante de "WindowMouseX()"
; -------------------------------------------------------------------------
Enumeration 
	#Gadget0
	#Gadget1
EndEnumeration
;
Global gs_windowmousedx.i, gs_windowmousedy.i
;
; *** retour des coordonnées de la souris par rapport à la fenêtre (Dans ou dehors)
;
; "windowmouseX normale()" donne "-1" pour toute position en dehors de la fenêtre, et donne 
; une position par rapport à la l'intérieur de la fenêtre intérieure, peu importe si la souris
; est dans ou en dehors de la fenêtre
;
Procedure.i gs_windowmousex(windownr.i) ; Retourne X relatif de la souris
		Protected wmx.i, dmx.i
		;
		wmx = WindowMouseX(windownr)
		dmx = DesktopMouseX()
		If wmx >= 0
				gs_windowmousedx = dmx-wmx
		EndIf
		ProcedureReturn DesktopMouseX()-gs_windowmousedx                  
EndProcedure

Procedure.i gs_windowmousey(windownr.i)  ; Retourne Y relatif de la souris
		Protected wmy.i, dmy.i
		;
		wmy = WindowMouseY(windownr)
		dmy = DesktopMouseY()
		If wmy >= 0
				gs_windowmousedy = dmy-wmy
		EndIf
		ProcedureReturn DesktopMouseY()-gs_windowmousedy                  
		
EndProcedure
;-------------------------------------------------------
; Exemple : 
;-------------------------------------------------------
MaxW=600:MaxH=400

ValOptions = 0  
	ValOptions | #PB_Window_SizeGadget    : ValOptions | #PB_Window_MinimizeGadget 
	ValOptions | #PB_Window_MaximizeGadget:ValOptions | #PB_Window_SystemMenu      
	ValOptions | #PB_Window_ScreenCentered;:ValOptions | #PB_Window_TitleBar
	
If OpenWindow(0,10,50,MaxW,MaxH,"PROGENE V 1.1 PB 4.5 Aout 2010 TEST",ValOptions)
; If OpenWindow(0,10,10,300,200," Essais souris ",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
	
	TextGadget(#Gadget0,15,240,50,20,"C'est Ceci ")
	StringGadget(#Gadget1, 15,270,MaxW-30,20,"")
						
		Repeat 
			iEvent = WaitWindowEvent(50)
			
			If iEvent = 0 Or iEvent = #WM_MOUSEMOVE
				x=gs_windowmousex(0)
				y=gs_windowmousey(0):Text$=""
				
				If x>MaxW:Text$="En dehors a droite ":EndIf
				If y>MaxH::Text$+"En dehors en dessous ":EndIf
				If x<0:Text$="En dehors a Gauche ":EndIf
				If y<0:Text$+"En dehors au dessus ":EndIf
				
				SetGadgetText(#Gadget1,Text$+Str(x)+" : "+Str(y))   
			EndIf
			
				Select iEvent            
						Case #PB_Event_Gadget
							Select EventGadget()
								Case #PB_Event_CloseWindow    
								Break 1  
								EndSelect
				EndSelect        
		Until iEvent = #PB_Event_CloseWindow  
EndIf

End
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: variante de "WindowMouseX()"

Message par GeBonet »

Sorry,
Erreur de transcription de ma part !!! :( c'est effectivement... "x=gs_windowmousex(0)" à l'origine...
Et normal puisque fenêtre ouverte avec "OpenWindow(0,10,50,MaxW,MaxH," PB 4.5 Aout 2010 TEST",ValOptions)
Image l'oeil à tout...
A+
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Répondre