Tester la souris dans une zone de forme carrée ou rectangle
Publié : jeu. 27/avr./2017 17:46
Bonjour,
J'ai voulu faire une fonction PosClic, qui par exemple permettrai de testé la souris dans une zone de forme carrée ou rectangulaire (ici en position X=3,Y=7, Taille De La Zone X = 32 , Taille De La Zone Y = 32):
If PosClic(3,71,32,32,1)
MessageRequester("Test de la souris dans une grille - Je suis le clic gauche de la souris",64)
EndIf
If PosClic(3,71,32,32,2)
MessageRequester("Test de la souris dans une grille - Je suis le clic droit de la souris",64)
EndIf
If PosClic(3,71,32,32,3)
MessageRequester("Test de la souris dans une grille - Je suis le clic du millieur de la souris",64)
EndIf
Ma version du code à partir des codes présenter ici :
Merci d'avance.
J'ai voulu faire une fonction PosClic, qui par exemple permettrai de testé la souris dans une zone de forme carrée ou rectangulaire (ici en position X=3,Y=7, Taille De La Zone X = 32 , Taille De La Zone Y = 32):
If PosClic(3,71,32,32,1)
MessageRequester("Test de la souris dans une grille - Je suis le clic gauche de la souris",64)
EndIf
If PosClic(3,71,32,32,2)
MessageRequester("Test de la souris dans une grille - Je suis le clic droit de la souris",64)
EndIf
If PosClic(3,71,32,32,3)
MessageRequester("Test de la souris dans une grille - Je suis le clic du millieur de la souris",64)
EndIf
Ma version du code à partir des codes présenter ici :
Merci d'avance.
Code : Tout sélectionner
;***********************************
; Notysoft Elektra
; Création simple de circuit Électronique
;***********************************
;***********************************
;===================================
; INITIALISATION
;===================================
EnableExplicit
#Bureau = #True
#StyleStandard = $CF0001
Enumeration
#Fenetre1
#PB_Element1
#PB_Element2
#PB_Element3
#PB_Element4
#ID_bouton_nouveau
#ID_bouton_open
#ID_bouton_dk
#ID_bouton_dk_s
#ID_bouton_aper_element
#ID_bouton_aper_impr
#ID_bouton_print
#ID_bouton_a_propos
#Text_1
#Text_2
#Text_3
#Text_4
#Text_5
#Text_6
#Text_7
#Text_8
#Text_9
#Text_10
#Entree1
#Entree2
#Entree3
#Entree4
#Entree5
#Entree6
#Entree7
#Entree8
#Entree9
#Entree10
#Entree11
#Entree12
#Entree13
#Entree14
#Entree15
#Entree16
#Entree17
#Entree18
#Entree19
#Entree20
#Sortie1
#Quitter
#Fichier
#pb_EventMenu
#FEN
#My_Event_LeftClick_Down = #PB_Event_FirstCustomValue
#My_Event_RightClick_Down
#My_Event_MiddleClick_Down
#My_Event_MiddleClick_Up
;#Black
;#White
EndEnumeration
Global glEvent.L,glGadget.L,glType.L,IndexSymbole.L
Global Quitte.L, Resultat.L,FondGris.L
Global Titre1.S, Titre2.S, X.L, Y.L, FacX.L,FacY.L,Event.L
Global Mx.I,My.I,Col.I
Declare Dessine_Grille()
Declare W_BOUTON (hWnd, uMsg, wParam, lParam)
Declare OpenGrille()
Declare.d PosClic(*x.Point, *y.Point,EcartX.d,EcartY.d,TestBouton.d)
Global Button.point,Radius.I,gMouseX.I,gMouseY.I
Radius = 40
Button\x = 50
Button\y = 50
;Plan de l'application
Declare Start()
Declare onEnter()
Declare.d Distance(*p.Point, *q.Point)
Declare Exit()
InitMouse()
;InitSprite()
Start()
Procedure Dessine_Grille()
;LoadFont(0, "Arial", 50)
;If CreateImage(0, 800, 702) And StartDrawing(ImageOutput(0))
DrawingFont(FontID(0))
;BackColor(RGB(200,250,250))
FrontColor(RGB(150,150,150))
Box(0,0,807,702)
;Lignes Horizontales
LineXY(3, 71 ,794,71,RGB(256,256,256))
LineXY(3, 104,794,104,RGB(256,256,256))
LineXY(3, 137,794,137,RGB(256,256,256))
LineXY(3, 170,794,170,RGB(256,256,256))
LineXY(3, 203,794,203,RGB(256,256,256))
LineXY(3, 236,794,236,RGB(256,256,256))
LineXY(3, 269,794,269,RGB(256,256,256))
LineXY(3, 302,794,302,RGB(256,256,256))
LineXY(3, 335,794,335,RGB(256,256,256))
LineXY(3, 368,794,368,RGB(256,256,256))
LineXY(3, 401,794,401,RGB(256,256,256))
LineXY(3, 434,794,434,RGB(256,256,256))
LineXY(3, 467,794,467,RGB(256,256,256))
LineXY(3, 500,794,500,RGB(256,256,256))
LineXY(3, 533,794,533,RGB(256,256,256))
LineXY(3, 566,794,566,RGB(256,256,256))
LineXY(3, 599,794,599,RGB(256,256,256))
LineXY(3, 632,794,632,RGB(256,256,256))
LineXY(3, 665,794,665,RGB(256,256,256))
LineXY(3, 698,794,698,RGB(256,256,256))
;Lignes Verticale
LineXY(3, 71,03,698,RGB(256,256,256))
LineXY(36, 71,36,698,RGB(256,256,256))
LineXY(69, 71,69,698,RGB(256,256,256))
LineXY(102, 71,102,698,RGB(256,256,256))
LineXY(135, 71,135,698,RGB(256,256,256))
LineXY(168, 71,168,698,RGB(256,256,256))
LineXY(201, 71,201,698,RGB(256,256,256))
LineXY(234, 71,234,698,RGB(256,256,256))
LineXY(267, 71,267,698,RGB(256,256,256))
LineXY(300, 71,300,698,RGB(256,256,256))
LineXY(333, 71,333,698,RGB(256,256,256))
LineXY(366, 71,366,698,RGB(256,256,256))
LineXY(399, 71,399,698,RGB(256,256,256))
LineXY(432, 71,432,698,RGB(256,256,256))
LineXY(465, 71,465,698,RGB(256,256,256))
LineXY(498, 71,498,698,RGB(256,256,256))
LineXY(531, 71,531,698,RGB(256,256,256))
LineXY(564, 71,564,698,RGB(256,256,256))
LineXY(597, 71,597,698,RGB(256,256,256))
LineXY(630, 71,630,698,RGB(256,256,256))
LineXY(663, 71,663,698,RGB(256,256,256))
LineXY(696, 71,696,698,RGB(256,256,256))
LineXY(729, 71,729,698,RGB(256,256,256))
LineXY(762, 71,762,698,RGB(256,256,256))
LineXY(795, 71,795,698,RGB(256,256,256))
;StopDrawing()
;ImageGadget(0, 0, 0, 807, 702, ImageID(0))
;EndIf
EndProcedure
Procedure Start()
If OpenWindow(#Fenetre1, 100,5,800,702, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
;OpenWindowedScreen(WindowID(#Fenetre1),0,0,800,702,#True,0,0)
;SetWindowColor(#Fenetre1, RGB(150,150,150))
; Création du canvas.
CanvasGadget(#Fenetre1, 0,0,800,702)
LoadFont(0, "Arial", 50)
StartDrawing(CanvasOutput(0))
Dessine_Grille()
;With Button
; Circle(\x, \y, Radius, RGB(50, 205, 50))
;EndWith
StopDrawing()
;Triggers
BindEvent(#PB_Event_CloseWindow, @Exit())
BindGadgetEvent(0, @onEnter())
Repeat : WaitWindowEvent() : ForEver
EndIf
EndProcedure
Procedure onEnter()
Protected mouse.point
mouse\x = GetGadgetAttribute(0, #PB_Canvas_MouseX)
mouse\y = GetGadgetAttribute(0, #PB_Canvas_MouseY)
If PosClic(3,71,32,32, 1) < 0
Debug "dans le cercle"
EndIf
EndProcedure
;Distance entres deux points (2D)
Procedure.d Distance(*p.Point, *q.Point)
Protected Distance.d, dx.d, dy.d
;Distance horizontale
dx = *p\x - *q\x
;Distance verticale
dy = *p\y - *q\y
;Théoréme de Pythagore
Distance = Sqr(dx*dx + dy*dy )
ProcedureReturn Distance
EndProcedure
Procedure.d PosClic(*x.Point, *y.Point,EcartX.d,EcartY.d,TestBouton.d)
;If (MouseButton(#PB_MouseButton_Left) And (TestBouton = 1) <> 0) And (*x.Point And *y.Point And *x.Point+EcartX And *y.Point) ; Gauche
;ProcedureReturn PosClic(*x.Point, *y.Point,EcartX.d,EcartY.d,TestBouton.d)
;EndIf
;If (MouseButton(#PB_MouseButton_Right) And (TestBouton = 2) <> 0) And (*x.Point And *y.Point And *x.Point+EcartX And *y.Point) ; Gauche
;ProcedureReturn PosClic(*x.Point, *y.Point,EcartX.d,EcartY.d,TestBouton.d)
;EndIf
;If (MouseButton(#PB_MouseButton_Middle) And (TestBouton = 1) <> 0) And (*x.Point And *y.Point And *x.Point+EcartX And *y.Point) ; Gauche
;ProcedureReturn PosClic(*x.Point, *y.Point,EcartX.d,EcartY.d,TestBouton.d)
;EndIf
StopDrawing()
If EventType() <> #PB_EventType_MouseLeave
StopDrawing()
StartDrawing(CanvasOutput(0))
Mx = GetGadgetAttribute(0, #PB_Canvas_MouseX)
My = GetGadgetAttribute(0, #PB_Canvas_MouseY)
COL = Point(Mx,My)
If (TestBouton = 2) <> 0 And (*x.Point And *y.Point And *x.Point+EcartX And *y.Point)
EndIf
EndIf
EndProcedure
Procedure Exit()
End
EndProcedure