Evènements de la souris
Evènements de la souris
Bonjour
Y a t-il un moyen (évènement) de savoir si la souris a bougé (ou si sa position a changé)??
Merci
Y a t-il un moyen (évènement) de savoir si la souris a bougé (ou si sa position a changé)??
Merci
Win7 (x64) 64 bits Pb 5.72
Re: Evènements de la souris
Salut
Tu as plusieurs possibilités.
sur la fenêtre avec
eventwindow() : sous windows #WM_MOUSEMOVE
tu peux aussi gérer via les gadgets :
par exemple, sur un canvasgadget()
Eventtype() : #PB_EventType_MouseMove
Sinon, tu mets dans une variable WindowMouseX() et WindowMouseY(), et tu vérifies toutes les secondes si ça a changé.
A+
Tu as plusieurs possibilités.
sur la fenêtre avec
eventwindow() : sous windows #WM_MOUSEMOVE
tu peux aussi gérer via les gadgets :
par exemple, sur un canvasgadget()
Eventtype() : #PB_EventType_MouseMove
Sinon, tu mets dans une variable WindowMouseX() et WindowMouseY(), et tu vérifies toutes les secondes si ça a changé.
A+
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Evènements de la souris
Code : Tout sélectionner
; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=735&highlight=
; Author: bobobo (updated for PB4.00 by blbltheworm)
; Date: 23. April 2003
; OS: Windows
; Demo: No
;Autor : bobobo
;-----------------------------------------
;Tastatur und Mausmessages in Fenstern OHNE directX
;dafür mit eventwParam und eventLParam (aber nur zur Anzeige für ganz Neugierige)
;soweit ich weiß wird EventwParam und EventlParam irgendwann nicht mehr unterstützt
;bis dahin gilt:
;Solange die Maus im Fensterchen ist gibt es bei Bewegung derselben
;diverse Mausmessages .. Und .. Bei aktivem Fenster und Tastaturereignissen
;gibt's Tastaturmessages (Taste runter und Tastehoch u.s.w.)
;ömm ja .. Debug aktivieren !!
OpenWindow(1,0,0,100,100,"Test",#PB_Window_ScreenCentered)
Debug "Bitte drücken sie eine beliebige Taste!"+Str(rr)
GetCursorPos_(st.POINT)
Debug st\x
Debug st\y
Repeat
Select WaitWindowEvent()
Case #WM_MOUSEMOVE
Debug "#WM_MOUSEMOVEw " + Str(EventwParam())
Debug "#WM_MOUSEMOVEl " + Str(EventlParam())
Case #WM_LBUTTONDBLCLK
Debug "#WM_LBUTTONDBLCLK " + Str(EventwParam())
Debug "#WM_LBUTTONDBLCLK " + Str(EventlParam())
Case #WM_LBUTTONDOWN
Debug "#WM_LBUTTONDOWN " + Str(EventwParam())
Debug "#WM_LBUTTONDOWN " + Str(EventlParam())
Case #WM_LBUTTONUP
Debug "#WM_LBUTTONUP " + Str(EventwParam())
Debug "#WM_LBUTTONUP " + Str(EventlParam())
Case #WM_RBUTTONDOWN
Debug "#WM_RBUTTONDOWN " + Str(EventwParam())
Debug "#WM_RBUTTONDOWN " + Str(EventlParam())
Case #WM_RBUTTONUP
Debug "#WM_RBUTTONUP" + Str(EventwParam())
Debug "#WM_RBUTTONUP" + Str(EventlParam())
Case #WM_MBUTTONDBLCLK
Debug "#WM_MBUTTONDBLCLK " + Str(EventwParam())
Debug "#WM_MBUTTONDBLCLK " + Str(EventlParam())
Case #WM_MBUTTONDOWN
Debug "#WM_MBUTTONDOWN " + Str(EventwParam())
Debug "#WM_MBUTTONDOWN " + Str(EventlParam())
Case #WM_MBUTTONUP
Debug "#WM_MBUTTONUP " + Str(EventwParam())
Debug "#WM_MBUTTONUP " + Str(EventlParam())
Case #WM_NCMOUSEMOVE
Debug "#WM_NCMOUSEMOVE " + Str(EventwParam())
Debug "#WM_NCMOUSEMOVE " + Str(EventlParam())
Case #WM_NCLBUTTONDBLCLK
Debug "#WM_NCLBUTTONDBLCLK " + Str(EventwParam())
Debug "#WM_NCLBUTTONDBLCLK " + Str(EventlParam())
Case #WM_ACTIVATE
Debug "#WM_ACTIVATE " +Str(EventwParam())
Debug "#WM_ACTIVATE " +Str(EventlParam())
Case #WM_CHAR
Debug "#CHAR w: " + Str(EventwParam())
Debug "#CHAR l: " + Str(EventlParam())
Case #WM_DEADCHAR
Debug "#DEADCHAR: " + Str(EventwParam())
Case #WM_KEYDOWN
Debug "#KEYDOWN(w): " + Str(EventwParam())
Debug "#KEYDOWN(l): " + Str(EventlParam())
Case #WM_KEYUP
Debug "#KEYUP(w): " + Str(EventwParam())
Debug "#KEYUP(l): " + Str(EventlParam())
Case #WM_SYSCHAR
Debug "#SYSCHAR: " + Str(EventwParam())
Case #WM_SYSDEADCHAR
Debug "#SYDEADSCHAR: " + Str(EventwParam())
Case #WM_SYSKEYDOWN
Debug "#SYSKEYDOWN: " + Str(EventwParam())
Case #WM_SYSKEYUP
Debug "#SYSKEYUP: " + Str(EventwParam())
EndSelect
Debug "-----------------"
ForEver
End
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Evènements de la souris
Pour ma part le plus simple est d'utilisé un canvas qui permet la gestion de tous les événement souris.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: Evènements de la souris
microdevweb a écrit :Pour ma part le plus simple est d'utilisé un canvas qui permet la gestion de tous les événement souris.
sauf si tu veux savoir si la souris a bouger en dehors de ta fenêtre en l'occurrence on ne sais pas
Re: Evènements de la souris
bjr à tous
Voici un autre exemple de dessin souris avec coordonnées en Titre
Cordialement
Voici un autre exemple de dessin souris avec coordonnées en Titre
Cordialement
Code : Tout sélectionner
OpenWindow(0, 0, 0, 600, 600, "Simulation Dessin Lasso", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
xy_depart = 0
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
Break
Case #WM_LBUTTONDOWN
If xy_depart = 0 ; stock point de depart xy de boucle
x1 = WindowMouseX(0)
y1 = WindowMouseY(0)
xy_depart = 1
EndIf
dessiner = #True ; lasso debut
Case #WM_LBUTTONUP
If xy_depart = 1
If StartDrawing(WindowOutput(0))
LineXY(x1, y1, x3, y3, $0000FF) ; raccorde debut et fin de boucle
StopDrawing()
EndIf
xy_depart = 0
EndIf
dessiner = #False ; fin de boucle
Default
x3 = WindowMouseX(0)
y3 = WindowMouseY(0)
SetWindowTitle(0,"Simulation Dessin Lasso: " + "X " + Str(x3) + ", " + "Y " + Str(y3))
If x3 <> -1 Or y3 <> -1 ; souris hors fenetre mais la boucle continue
If StartDrawing(WindowOutput(0))
If dessiner = #True
LineXY(x2, y2, x3, y3, $0000FF)
EndIf
StopDrawing()
EndIf
x2 = x3 ; transfer x3 en x2
y2 = y3 ; transfer y3 en y2
EndIf
EndSelect
ForEver
End
Re: Evènements de la souris
bjr à tous
j'ai retrouvé ce code d’événements souris intéressant.
en faisant une recherche sur les trois forums avec "Event_WindowsMouseMove = $200"
pas vu ce code...
donc, je ne sais plus comment il s'est retrouvé dans mes archives
Auteur: Erlend - NORWAY
Cordialement
j'ai retrouvé ce code d’événements souris intéressant.
en faisant une recherche sur les trois forums avec "Event_WindowsMouseMove = $200"
pas vu ce code...
donc, je ne sais plus comment il s'est retrouvé dans mes archives
Auteur: Erlend - NORWAY
Cordialement
Code : Tout sélectionner
;https://www.purebasic.fr/english/viewtopic.php?p=328543#p328543
; correction Demivec chevaucement n'efface plus le polygone precedent
;auteur: Erlend - NORWAY
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
#PB_Event_WindowsMouseMove = $200
CompilerCase #PB_OS_Linux
#PB_Event_WindowsMouseMove = -1
CompilerCase #PB_OS_MacOS
#PB_Event_WindowsMouseMove = 0
CompilerEndSelect
Structure pippoint
x.l
y.l
EndStructure
Procedure FilledPolygon(List points.pippoint(),Color)
NewList nodes.i()
;Find least and most y values to restrict area to transverse when filling..
ResetList(points())
miny=OutputHeight()-1
maxy=0
While NextElement(points())
If points()\y<miny:miny=points()\y:EndIf
If points()\y>maxy:maxy=points()\y:EndIf
Wend
For cy=miny To maxy
x.f=cx
y.f=cy
oddnodes=#False
ClearList(nodes())
LastElement(points())
x1.f=points()\x
y1.f=points()\y
ResetList(points())
While NextElement(points())
x2.f=points()\x
y2.f=points()\y
If ((y2<y) And y1>=y) Or (y1<y And y2>=y)
AddElement(nodes())
nodes()=(x2+(y-y2) / (y1-y2) * (x1-x2))
EndIf
x1=x2
y1=y2
Wend
SortList(nodes(),#PB_Sort_Ascending)
ResetList(nodes())
While NextElement(nodes())
x1=nodes()
NextElement(nodes())
x2=nodes()
LineXY(x1,y,x2,y,Color)
Wend
Next
FirstElement(points())
oldx=points()\x
oldy=points()\y
While NextElement(points())
LineXY(oldx,oldy,points()\x,points()\y,Color)
oldx=points()\x
oldy=points()\y
Wend
EndProcedure
NewList mpp.pippoint()
OpenWindow(0, 0, 0, 640, 480, "Filled Polygon", #PB_Window_SystemMenu)
CreateImage(0, 640, 480)
StartDrawing(ImageOutput(0))
Box(0, 0, 640, 480, 0)
StopDrawing()
ImageGadget(0, 0, 0, 640, 480, ImageID(0))
exit = #False
Repeat
event = WaitWindowEvent()
; Debug Event
Select event
Case #PB_Event_WindowsMouseMove
If ListSize(mpp()) > 0
SelectElement(mpp(), ListSize(mpp()) - 1)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_XOr)
LineXY(mpp()\x, mpp()\y, MouseX, MouseY, $FFFFFF) ;remove last line drawn
MouseX = WindowMouseX(0)
MouseY = WindowMouseY(0)
LineXY(mpp()\x, mpp()\y, MouseX, MouseY, $FFFFFF) ;add a new line
StopDrawing()
SetGadgetState(0, ImageID(0))
Else
MouseX = WindowMouseX(0)
MouseY = WindowMouseY(0)
EndIf
Case #PB_Event_Gadget
If EventGadget() = 0
Select EventType()
Case #PB_EventType_RightClick
If ListSize(mpp()) > 2
StartDrawing(ImageOutput(0))
SelectElement(mpp(), ListSize(mpp()) - 1)
;DrawingMode(#PB_2DDrawing_XOr) ;uncomment this line for an interesting visual effect
LineXY(mpp()\x, mpp()\y, MouseX, MouseY, $0)
FilledPolygon(mpp(),RGB(Random(220) + 35, Random(220) + 35, Random(220) + 35))
StopDrawing()
SetGadgetState(0, ImageID(0))
ClearList(mpp())
EndIf
Case #PB_EventType_LeftClick
MouseX = WindowMouseX(0)
MouseY = WindowMouseY(0)
If ListSize(mpp()) > 0
SetGadgetState(0, ImageID(0))
EndIf
AddElement(mpp())
mpp()\x = MouseX
mpp()\y = MouseY
EndSelect
EndIf
Case #PB_Event_CloseWindow
exit = #True
EndSelect
Until exit
Dernière modification par kernadec le jeu. 15/avr./2021 15:54, modifié 1 fois.
Re: Evènements de la souris
super !
Merci beaucoup
je vais peut-être l'utiliser pour les sélections polygonales je pense (ainsi que le remplissage polygonale)
Merci beaucoup
je vais peut-être l'utiliser pour les sélections polygonales je pense (ainsi que le remplissage polygonale)
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Evènements de la souris
bjr à tous
Le code précédent Filled Polygon à été mis jours
j'ai retrouvé le post du code Filled Polygon qui est de juillet 2010
donc car "Demivec" avait fait une correction pour que le polygone
inférieur ne soit pas effacé par la construction d'un autre polygone
au premier plan.
Cordialement
Le code précédent Filled Polygon à été mis jours
j'ai retrouvé le post du code Filled Polygon qui est de juillet 2010
donc car "Demivec" avait fait une correction pour que le polygone
inférieur ne soit pas effacé par la construction d'un autre polygone
au premier plan.
Cordialement