Je m'en occupe tout de suite

Par contre n'aurait tu pas mis les deux meme "Haut gauche" en debut ???

Code : Tout sélectionner
Enumeration
#Fenetre
#Image_0
#Image_1
#ImageGadget
EndEnumeration
Global Hauteur.l,Largeur .l
Hauteur = 300
Largeur = 400
Global DepartX
Global DepartY
Global Passage
CreateImage(#Image_0, Largeur, Hauteur)
CreateImage(#Image_1, Largeur, Hauteur)
Procedure DessineFleche(x, y)
static MemX, MemY
If MemX = x And MemY = Y
ProcedureReturn
Else
MemX = X
MemY = y
EndIf
If Not Passage And x <> 0 And y <> 0
Passage = #True
DepartX = X
DepartY = Y
EndIf
StartDrawing(ImageOutput(#Image_1))
DrawImage(ImageID(#Image_0), 0, 0)
If x => DepartX And y <= DepartY ; Haut droit
x1 = Abs(Largeur + x - (Largeur * 2))
y1 = Hauteur - y
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
LineXY(0, GadgetHeight(#ImageGadget)- 10, GadgetWidth(#ImageGadget) - 10,GadgetHeight(#ImageGadget)- 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadget) - 10, 10, GadgetWidth(#ImageGadget) - 10, GadgetHeight(#ImageGadget)- 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadget) - 10, 10, GadgetWidth(#ImageGadget) - 15, 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadget) - 10, 10, GadgetWidth(#ImageGadget) - 5, 20, RGB(226, 23, 29))
StopDrawing()
ImageGadget(#ImageGadget, Largeur, Hauteur - y1, x1, Hauteur + y, ImageID(#Image_1))
ElseIf x => DepartX And y => DepartY ; Bas droit
x1 = Abs(Largeur + x - (Largeur * 2))
y1 = y - Hauteur
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
LineXY(0, 10, GadgetWidth(#ImageGadget) - 10, 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadget) - 10, 10, GadgetWidth(#ImageGadget) - 10, GadgetHeight(#ImageGadget) - 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadget) - 10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget) - 15, GadgetHeight(#ImageGadget) - 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadget) - 10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget) - 5,GadgetHeight(#ImageGadget) - 20, RGB(226, 23, 29))
StopDrawing()
ImageGadget(#ImageGadget, Largeur, Hauteur, x1, Hauteur + y1, ImageID(#Image_1))
ElseIf x <= DepartX And y => DepartY ; Bas gauche
x1 = Abs(1 - x + largeur)
y1 = Abs(Hauteur - y)
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
LineXY(10, 10, GadgetWidth(#ImageGadget), 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadget) - x1 + 10, 10, GadgetWidth(#ImageGadget)-x1 + 10, GadgetHeight(#ImageGadget)- 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadget) - x1 + 10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget) -x1 + 15, GadgetHeight(#ImageGadget) - 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadget) -x1 + 10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget) -x1 + 5,GadgetHeight(#ImageGadget) - 20, RGB(226, 23, 29))
StopDrawing()
ImageGadget(#ImageGadget,x ,Hauteur, x1, Hauteur + y, ImageID(#Image_1))
ElseIf x <= DepartX And y <= DepartY ; Haut gauche
x1 = Abs(1 - x + Largeur)
y1 = Abs(1 - y + Hauteur)
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
LineXY(10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget),GadgetHeight(#ImageGadget) - 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadget)- x1 + 10, 10, GadgetWidth(#ImageGadget) - x1 + 10, GadgetHeight(#ImageGadget) - 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadget)- x1 + 10, 10, GadgetWidth(#ImageGadget) - x1 + 15, 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadget)- x1 + 10, 10, GadgetWidth(#ImageGadget) - x1 + 5, 20, RGB(226, 23, 29))
StopDrawing()
ImageGadget(#ImageGadget,x, y, x1, y1,ImageID(#Image_1))
EndIf
ResizeImage(#Image_1,x1, y1)
SetGadgetState(#ImageGadget,ImageID(#Image_1))
EndProcedure
OpenWindow(#Fenetre, 0, 0, 800, 600, "Fleche multidirectionnelle", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
ImageGadget(#ImageGadget,0, 0, 0, 0, ImageID(#Image_1))
StartDrawing(ImageOutput(#Image_0))
FillArea(0,0,RGB(255,255,255),RGB(255,255,255))
StopDrawing()
DessineFleche(Largeur - 30, Hauteur - 30)
Repeat
Evenement = WaitWindowEvent()
MouseX = WindowMouseX(#Fenetre)
MouseY = WindowMouseY(#Fenetre)
Select Evenement
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON)
DessineFleche(MouseX , MouseY)
EndIf
EndSelect
Until Evenement = #PB_Event_CloseWindow
Code : Tout sélectionner
ImageGadget(#ImageGadget, Largeur, Hauteur - y1, x1, Hauteur + y, ImageID(#Image_1))
ImageGadget(#ImageGadget, Largeur, Hauteur - y1, x1, Hauteur - y, ImageID(#Image_1))
-------------------------------------------------------------ici
Code : Tout sélectionner
Enumeration
#Fenetre
#Imagehg_0
#Imagehg_1
#Imagehd_0
#Imagehd_1
#Imagebg_0
#Imagebg_1
#Imagebd_0
#Imagebd_1
#ImageGadgethg
#ImageGadgethd
#ImageGadgetbg
#ImageGadgetbd
EndEnumeration
Global Hauteur.l,Largeur .l
Hauteur = 300
Largeur = 400
CreateImage(#Imagehg_0, Largeur,Hauteur)
CreateImage(#Imagehg_1, Largeur,Hauteur)
CreateImage(#Imagehd_0, Largeur,Hauteur)
CreateImage(#Imagehd_1, Largeur,Hauteur)
CreateImage(#Imagebg_0, Largeur,Hauteur)
CreateImage(#Imagebg_1, Largeur,Hauteur)
CreateImage(#Imagebd_0, Largeur,Hauteur)
CreateImage(#Imagebd_1, Largeur,Hauteur)
Procedure DessineFleche_hg(x, y)
x1=Abs(1-x+largeur-1)
y1=Abs(1-y+Hauteur-1)
;If (X1>0 And X1<400) Or (Y1>0 And Y1<300)
StartDrawing(ImageOutput(#Imagehg_1))
DrawImage(ImageID(#Imagehg_0), 0, 0)
LineXY(10, GadgetHeight(#ImageGadgethg)- 10, GadgetWidth(#ImageGadgethg),GadgetHeight(#ImageGadgethg)- 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadgethg)-x1 + 10, 10, GadgetWidth(#ImageGadgethg)-x1 + 10, GadgetHeight(#ImageGadgethg)- 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadgethg)-x1 +10, 10, GadgetWidth(#ImageGadgethg)-x1 +15, 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadgethg)-x1 +10, 10, GadgetWidth(#ImageGadgethg)-x1 + 5, 20, RGB(226, 23, 29))
StopDrawing()
ResizeImage(#Imagehg_1, x1, y1)
ResizeImage(#Imagehg_0, x1, y1)
ImageGadget(#ImageGadgethg,x,y,x1, y1,ImageID(#Imagehg_1))
SetGadgetState(#ImageGadgethg,ImageID(#Imagehg_1))
EndProcedure
Procedure DessineFleche_hd(x, y)
x1=Abs(Largeur+x-(Largeur*2))
y1=Hauteur-y
StartDrawing(ImageOutput(#Imagehd_1))
DrawImage(ImageID(#Imagehd_0), 0, 0)
LineXY(0, GadgetHeight(#ImageGadgethd)- 10, GadgetWidth(#ImageGadgethd) - 10,GadgetHeight(#ImageGadgethd)- 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadgethd) - 10, 10, GadgetWidth(#ImageGadgethd) - 10, GadgetHeight(#ImageGadgethd)- 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadgethd) - 10, 10, GadgetWidth(#ImageGadgethd) - 15, 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadgethd) - 10, 10, GadgetWidth(#ImageGadgethd) - 5, 20, RGB(226, 23, 29))
StopDrawing()
ResizeImage(#Imagehd_1,x1, y1)
ResizeImage(#Imagehd_0, x1, y1)
ImageGadget(#ImageGadgethd, Largeur, Hauteur-y1,x1, Hauteur-y, ImageID(#Imagehd_1))
SetGadgetState(#ImageGadgethd,ImageID(#Imagehd_1))
EndProcedure
Procedure DessineFleche_bg(x, y)
x1=Abs(Largeur+x-(Largeur*2))
y1=y-Hauteur
StartDrawing(ImageOutput(#Imagebg_1))
DrawImage(ImageID(#Imagebg_0), 0, 0)
LineXY(0, 10, GadgetWidth(#ImageGadgetbg) - 10, 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadgetbg) - 10, 10, GadgetWidth(#ImageGadgetbg) - 10, GadgetHeight(#ImageGadgetbg)- 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadgetbg) - 10, GadgetHeight(#ImageGadgetbg) - 10, GadgetWidth(#ImageGadgetbg) - 15, GadgetHeight(#ImageGadgetbg) - 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadgetbg) - 10, GadgetHeight(#ImageGadgetbg) - 10, GadgetWidth(#ImageGadgetbg) - 5,GadgetHeight(#ImageGadgetbg) - 20, RGB(226, 23, 29))
StopDrawing()
ResizeImage(#Imagebg_1,x1, y1)
ResizeImage(#Imagebg_0, x1, y1)
ImageGadget(#ImageGadgetbg, Largeur,Hauteur,x1, Hauteur+y1, ImageID(#Imagebg_1))
SetGadgetState(#ImageGadgetbg,ImageID(#Imagebg_1))
EndProcedure
Procedure DessineFleche_bd(x, y)
x1=Abs(1-x+largeur)
y1=Abs(Hauteur-y)
StartDrawing(ImageOutput(#Imagebd_1))
DrawImage(ImageID(#Imagebd_0), 0, 0)
LineXY(10, 10, GadgetWidth(#ImageGadgetbd), 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadgetbd)-x1 + 10, 10, GadgetWidth(#ImageGadgetbd)-x1 + 10, GadgetHeight(#ImageGadgetbd)- 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadgetbd)-x1 + 10, GadgetHeight(#ImageGadgetbd) - 10, GadgetWidth(#ImageGadgetbd) -x1+ 15, GadgetHeight(#ImageGadgetbd) - 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadgetbd) -x1+ 10, GadgetHeight(#ImageGadgetbd) - 10, GadgetWidth(#ImageGadgetbd) -x1+ 5,GadgetHeight(#ImageGadgetbd) - 20, RGB(226, 23, 29))
StopDrawing()
ResizeImage(#Imagebd_1,x1, y1)
ResizeImage(#Imagebd_0, x1, y1)
ImageGadget(#ImageGadgetbd,x ,Hauteur,x1,Hauteur+y, ImageID(#Imagebd_1))
SetGadgetState(#ImageGadgetbd,ImageID(#Imagebd_1))
EndProcedure
OpenWindow(#Fenetre, 0, 0, 800, 600, "New window ( 0 )", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
ImageGadget(#ImageGadgethg,0,0,0,0,ImageID(#Imagehg_1)) ;initialise ImageGadge
StartDrawing(ImageOutput(#Imagehg_0))
FillArea(0,0,RGB(255,255,255),RGB(255,255,255))
StopDrawing()
ImageGadget(#ImageGadgethd,0,0,0,0,ImageID(#Imagehd_1)) ;initialise ImageGadge
StartDrawing(ImageOutput(#Imagehd_0))
FillArea(0,0,RGB(255,255,255),RGB(255,255,255))
StopDrawing()
ImageGadget(#ImageGadgetbg,0,0,0,0,ImageID(#Imagebg_1)) ;initialise ImageGadge
StartDrawing(ImageOutput(#Imagebg_0))
FillArea(0,0,RGB(255,255,255),RGB(255,255,255))
StopDrawing()
ImageGadget(#ImageGadgetbd,0,0,0,0,ImageID(#Imagebd_1)) ;initialise ImageGadge
StartDrawing(ImageOutput(#Imagebd_0))
FillArea(0,0,RGB(255,255,255),RGB(255,255,255))
StopDrawing()
DessineFleche_hg(Largeur-30,Hauteur-30)
DessineFleche_hd(Largeur-30,Hauteur-30)
DessineFleche_bg(Largeur+30,Hauteur+30)
DessineFleche_bd(Largeur-30,Hauteur-30)
Repeat
Evenement = WaitWindowEvent()
MouseX = WindowMouseX(#Fenetre)
MouseY = WindowMouseY(#Fenetre)
If mousex<400 And mousey<300
Select Evenement
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON)
DessineFleche_hg(MouseX , MouseY)
EndIf
EndSelect
EndIf
If mousex>400 And mousey<300
Select Evenement
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON) ;And MouseX > GadgetX(#ImageGadget) And MouseY > GadgetY(#ImageGadget)
DessineFleche_hd(MouseX , MouseY)
EndIf
EndSelect
EndIf
If mousex>400 And mousey>300
Select Evenement
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON)
DessineFleche_bg(MouseX , MouseY )
EndIf
EndSelect
EndIf
If mousex<400 And mousey>300
Select Evenement
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON)
DessineFleche_bd(MouseX , MouseY)
EndIf
EndSelect
EndIf
Until Evenement = #PB_Event_CloseWindow
Code : Tout sélectionner
Enumeration
#Fenetre
#Image_0
#Image_1
#ImageGadget
EndEnumeration
Global Hauteur.l,Largeur .l
Hauteur = 300
Largeur = 400
Global DepartX
Global DepartY
Global Passage
CreateImage(#Image_0, Largeur, Hauteur)
CreateImage(#Image_1, Largeur, Hauteur)
Procedure DessineFleche(x, y)
Static MemX, MemY
If MemX = x And MemY = Y
ProcedureReturn
Else
MemX = X
MemY = y
EndIf
If Not Passage And x <> 0 And y <> 0
Passage = #True
DepartX = X
DepartY = Y
EndIf
StartDrawing(ImageOutput(#Image_1))
DrawImage(ImageID(#Image_0), 0, 0)
If x => DepartX And y <= DepartY ; Haut droit
x1 = Abs(Largeur + x - (Largeur * 2))
y1 = Hauteur - y
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
LineXY(0, GadgetHeight(#ImageGadget)- 10, GadgetWidth(#ImageGadget) - 10,GadgetHeight(#ImageGadget) - 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadget) - 10, 10, GadgetWidth(#ImageGadget) - 10, GadgetHeight(#ImageGadget) - 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadget) - 10, 10, GadgetWidth(#ImageGadget) - 15, 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadget) - 10, 10, GadgetWidth(#ImageGadget) - 5, 20, RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, Largeur, Hauteur - y1, x1, Hauteur + y)
ElseIf x => DepartX And y => DepartY ; Bas droit
x1 = Abs(Largeur + x - (Largeur * 2))
y1 = y - Hauteur
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
LineXY(0, 10, GadgetWidth(#ImageGadget) - 10, 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadget) - 10, 10, GadgetWidth(#ImageGadget) - 10, GadgetHeight(#ImageGadget) - 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadget) - 10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget) - 15, GadgetHeight(#ImageGadget) - 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadget) - 10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget) - 5, GadgetHeight(#ImageGadget) - 20, RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, Largeur, Hauteur, x1, Hauteur + y1)
ElseIf x <= DepartX And y => DepartY ; Bas gauche
x1 = Abs(1 - x + largeur)
y1 = Abs(Hauteur - y)
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
LineXY(10, 10, GadgetWidth(#ImageGadget), 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadget) - x1 + 10, 10, GadgetWidth(#ImageGadget)-x1 + 10, GadgetHeight(#ImageGadget)- 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadget) - x1 + 10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget) - x1 + 15, GadgetHeight(#ImageGadget) - 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadget) - x1 + 10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget) - x1 + 5, GadgetHeight(#ImageGadget) - 20, RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, x ,Hauteur, x1, Hauteur + y)
ElseIf x <= DepartX And y <= DepartY ; Haut gauche
x1 = Abs(1 - x + Largeur)
y1 = Abs(1 - y + Hauteur)
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
LineXY(10, GadgetHeight(#ImageGadget) - 10, GadgetWidth(#ImageGadget),GadgetHeight(#ImageGadget) - 10, RGB(226, 23, 29)) ; Horizontale
LineXY(GadgetWidth(#ImageGadget) - x1 + 10, 10, GadgetWidth(#ImageGadget) - x1 + 10, GadgetHeight(#ImageGadget) - 10, RGB(226, 23, 29)) ; Verticale
LineXY(GadgetWidth(#ImageGadget) - x1 + 10, 10, GadgetWidth(#ImageGadget) - x1 + 15, 20, RGB(226, 23, 29))
LineXY(GadgetWidth(#ImageGadget) - x1 + 10, 10, GadgetWidth(#ImageGadget) - x1 + 5, 20, RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, x, y, x1, y1)
EndIf
ResizeImage(#Image_1, x1, y1)
SetGadgetState(#ImageGadget,ImageID(#Image_1))
EndProcedure
OpenWindow(#Fenetre, 0, 0, 800, 600, "Fleche multidirectionnelle", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
ImageGadget(#ImageGadget,0, 0, 0, 0, ImageID(#Image_1))
StartDrawing(ImageOutput(#Image_0))
Box(0, 0, Largeur, Largeur, RGB(255, 255, 255))
StopDrawing()
DessineFleche(Largeur - 30, Hauteur - 30)
Repeat
Evenement = WaitWindowEvent()
MouseX = WindowMouseX(#Fenetre)
MouseY = WindowMouseY(#Fenetre)
Select Evenement
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON)
DessineFleche(MouseX , MouseY)
EndIf
EndSelect
Until Evenement = #PB_Event_CloseWindow
excellent ton second code plus de flick, flip, flap, flop..
Code : Tout sélectionner
ResizeGadget(#ImageGadget, Largeur, Hauteur - y1, x1, Hauteur - y)
Code : Tout sélectionner
DessineFleche(Largeur - 1, Hauteur - 1)
Code : Tout sélectionner
Enumeration
#Fenetre
#Image_0
#Image_1
#ImageGadget
EndEnumeration
Global dc.l,epais.l,Hauteur.l,Largeur .l,Pos.l
Hauteur = 300
Largeur = 400
Global DepartX
Global DepartY
Global Passage
epais=12
Pos=34
CreateImage(#Image_0, Largeur, Hauteur)
CreateImage(#Image_1, Largeur, Hauteur)
Procedure Ligne(x,y,x1,y1,Width,color)
pen=CreatePen_(#PS_SOLID,Width,color)
penOld=SelectObject_(DC,pen)
MoveToEx_(DC,x,y,0):LineTo_(DC,x1,y1)
DeleteObject_(pen)
DeleteObject_(penOld)
EndProcedure
Procedure DessineFleche(x, y)
Static MemX, MemY
If MemX = x And MemY = Y
ProcedureReturn
Else
MemX = X
MemY = y
EndIf
If Not Passage And x <> 0 And y <> 0
Passage = #True
DepartX = X
DepartY = Y
EndIf
dc=StartDrawing(ImageOutput(#Image_1))
DrawImage(ImageID(#Image_0), 0, 0)
If x => DepartX And y <= DepartY ; Haut droit
x1 = Abs(Largeur + x - (Largeur * 2))
y1 = Hauteur - y
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
Ligne(0, GadgetHeight(#ImageGadget)- Pos, GadgetWidth(#ImageGadget) - Pos,GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Horizontale
Ligne(GadgetWidth(#ImageGadget) - Pos, Pos, GadgetWidth(#ImageGadget) - Pos, GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Verticale
Ligne(GadgetWidth(#ImageGadget) - Pos, Pos-epais, GadgetWidth(#ImageGadget) - Pos/2*3-epais, Pos*2, epais,RGB(226, 23, 29))
Ligne(GadgetWidth(#ImageGadget) - Pos, Pos-epais, GadgetWidth(#ImageGadget) - Pos/2+epais, Pos*2, epais,RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, Largeur, Hauteur - y1, x1, Hauteur + y)
ElseIf x => DepartX And y => DepartY ; Bas droit
x1 = Abs(Largeur + x - (Largeur * 2))
y1 = y - Hauteur
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
Ligne(0, Pos, GadgetWidth(#ImageGadget) - Pos, Pos, epais,RGB(226, 23, 29)) ; Horizontale
Ligne(GadgetWidth(#ImageGadget) - Pos, Pos, GadgetWidth(#ImageGadget) - Pos, GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Verticale
Ligne(GadgetWidth(#ImageGadget) - Pos, GadgetHeight(#ImageGadget) - Pos+epais, GadgetWidth(#ImageGadget) - Pos/2*3-epais, GadgetHeight(#ImageGadget) - Pos*2, epais,RGB(226, 23, 29))
Ligne(GadgetWidth(#ImageGadget) - Pos, GadgetHeight(#ImageGadget) - Pos+epais, GadgetWidth(#ImageGadget) - Pos/2+epais, GadgetHeight(#ImageGadget) - Pos*2, epais,RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, Largeur, Hauteur, x1, Hauteur + y1)
ElseIf x <= DepartX And y => DepartY ; Bas gauche
x1 = Abs(1 - x + largeur)
y1 = Abs(Hauteur - y)
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
Ligne(Pos, Pos, GadgetWidth(#ImageGadget), Pos, epais,RGB(226, 23, 29)) ; Horizontale
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, Pos, GadgetWidth(#ImageGadget)-x1 + Pos, GadgetHeight(#ImageGadget)- Pos, epais,RGB(226, 23, 29)) ; Verticale
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, GadgetHeight(#ImageGadget) - Pos+epais, GadgetWidth(#ImageGadget) - x1 + Pos/2*3+epais, GadgetHeight(#ImageGadget) - Pos*2, epais,RGB(226, 23, 29))
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, GadgetHeight(#ImageGadget) - Pos+epais, GadgetWidth(#ImageGadget) - x1 + Pos/2-epais, GadgetHeight(#ImageGadget) - Pos*2, epais,RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, x ,Hauteur, x1, Hauteur + y)
ElseIf x <= DepartX And y <= DepartY ; Haut gauche
x1 = Abs(1 - x + Largeur)
y1 = Abs(1 - y + Hauteur)
If x1 <= 1 : x1 = 1 : EndIf
If y1 <= 1 : y1 = 1 : EndIf
Ligne(Pos, GadgetHeight(#ImageGadget) - Pos, GadgetWidth(#ImageGadget),GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Horizontale
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, Pos, GadgetWidth(#ImageGadget) - x1 + Pos, GadgetHeight(#ImageGadget) - Pos, epais,RGB(226, 23, 29)) ; Verticale
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, Pos-epais, GadgetWidth(#ImageGadget) - x1 + Pos/2*3+epais, Pos*2, epais,RGB(226, 23, 29))
Ligne(GadgetWidth(#ImageGadget) - x1 + Pos, Pos-epais, GadgetWidth(#ImageGadget) - x1 + Pos/2-epais, Pos*2, epais,RGB(226, 23, 29))
StopDrawing()
ResizeGadget(#ImageGadget, x, y, x1, y1)
EndIf
ResizeImage(#Image_1, x1, y1)
SetGadgetState(#ImageGadget,ImageID(#Image_1))
EndProcedure
OpenWindow(#Fenetre, 0, 0, 800, 600, "Fleche multidirectionnelle", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_TitleBar)
ImageGadget(#ImageGadget,0, 0, 0, 0, ImageID(#Image_1))
StartDrawing(ImageOutput(#Image_0))
Box(0, 0, Largeur, Largeur, RGB(255, 255, 255))
StopDrawing()
DessineFleche(Largeur - 1, Hauteur - 1)
Repeat
Evenement = WaitWindowEvent()
MouseX = WindowMouseX(#Fenetre)
MouseY = WindowMouseY(#Fenetre)
Select Evenement
Case #WM_MOUSEMOVE
If GetAsyncKeyState_(#VK_LBUTTON)
DessineFleche(MouseX , MouseY)
EndIf
EndSelect
Until Evenement = #PB_Event_CloseWindow
Code : Tout sélectionner
; #####################################################
; ####### kernadec en janvier 2010 ######
; sur l'dée de fleche du projet KCC
; flèche au choix 8 directions avec la molette
; deplacement clic gauche taille clic droit
; #####################################################
#WM_MOUSEWHEEL = $20A
Enumeration
#Fenetre
#Image_0
#Image_1
#ImageGadget
#boutonGadget_0
#boutonGadget_1
#boutonGadget_2
#boutonGadget_3
EndEnumeration
Global dc.l,epais.l,fleche.l,px.l
winl.l=800
winh.l=600
Posx.l=0
Posy.l=0
Posl.l=300
Posh.l=300
epais=20
Px=45
Procedure.w MouseWheelDelta()
z.w=((EventwParam()>>16)&$FFFF)
ProcedureReturn -(z/100)
EndProcedure
Procedure Ligne(x,y,x1,y1,Width,color)
pen=CreatePen_(#PS_SOLID,Width,color)
penOld=SelectObject_(DC,pen)
MoveToEx_(DC,x,y,0):LineTo_(DC,x1,y1)
DeleteObject_(pen)
DeleteObject_(penOld)
EndProcedure
Procedure dessin(Posx,Posy,Posl,Posh)
DisableGadget(#ImageGadget,0)
dc=StartDrawing( ImageOutput(#Image_1))
Box(0,0,WindowWidth(#Fenetre),WindowHeight(#Fenetre),RGB(225,225,225))
DrawImage(ImageID(#Image_0),Posx,Posy,Posl,Posh)
If fleche=0
Ligne(Posx,Posy+px,Posx+Posl-px,Posy+px,epais,RGB(226,23,29)) ; Horizontale
Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2*3,Posy+Posh-px*2,epais,RGB(226, 23, 29))
Ligne(Posx+Posl-px,Posy+Posh-px,Posx+Posl-px/2,Posy+Posh-px*2,epais,RGB(226, 23, 29))
EndIf
If fleche=1
Ligne(Posx+px,Posy+Posh-px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
Ligne(Posx+px,Posy,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
Ligne(Posx+Posl-px*2,Posy+Posh-px/2*3,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
Ligne(Posx+Posl-px*2,Posy+Posh-px/2,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29))
EndIf
If fleche=2
Ligne(Posx+px,Posy+px,Posx+Posl,Posy+px,epais,RGB(226, 23, 29)) ; Horizontale
Ligne(Posx+px,Posy+px,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
Ligne(Posx+px,Posy+Posh-px,Posx+px/2*3,Posy+Posh-px*2,epais,RGB(226, 23, 29))
Ligne(Posx+px,Posy+Posh-px,Posx+px/2,Posy+Posh-px*2,epais,RGB(226, 23, 29))
EndIf
If fleche=3
Ligne(Posx+px,Posy+Posh-px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
Ligne(Posx+Posl-px,Posy,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
Ligne(Posx+px*2,Posy+Posh-px/2*3,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29))
Ligne(Posx+px*2,Posy+Posh-px/2,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29))
EndIf
If fleche=4
Ligne(Posx+px,Posy+Posh-px,Posx+Posl,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
Ligne(Posx+px,Posy+px,Posx+px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
Ligne(Posx+px,Posy+px,Posx+px/2*3,Posy+px*2,epais,RGB(226, 23, 29))
Ligne(Posx+px,Posy+px,Posx+px/2,Posy+px*2,epais,RGB(226, 23, 29))
EndIf
If fleche=5
Ligne(Posx+px,Posy+px,Posx+Posl-px,Posy+px,epais,RGB(226, 23, 29)) ; Horizontale
Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px,Posy+Posh,epais,RGB(226, 23, 29)) ; Verticale
Ligne(Posx+px*2,Posy+px/2*3,Posx+px,Posy+px,epais,RGB(226, 23, 29))
Ligne(Posx+px*2,Posy+px/2,Posx+px,Posy+px,epais,RGB(226, 23, 29))
EndIf
If fleche=6
Ligne(Posx,Posy+Posh-px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Horizontale
Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px,Posy+Posh-px,epais,RGB(226, 23, 29)) ; Verticale
Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px/2*3,Posy+px*2,epais,RGB(226, 23, 29))
Ligne(Posx+Posl-px,Posy+px,Posx+Posl-px/2,Posy+px*2,epais,RGB(226, 23, 29))
EndIf
If fleche=7
Ligne(Posx+px,Posy+px,Posx+Posl-px,Posy+px,epais,RGB(226, 23, 29)) ; Horizontale
Ligne(Posx+px,Posy+px,Posx+px,Posy+Posh,epais,RGB(226, 23, 29)) ; Verticale
Ligne(Posx+Posl-px*2,Posy+px/2*3-y1,Posx+Posl-px,Posy+px-y1,epais,RGB(226, 23, 29))
Ligne(Posx+Posl-px*2,Posy+px/2-y1,Posx+Posl-px,Posy+px-y1,epais,RGB(226, 23, 29))
EndIf
StopDrawing()
ButtonGadget(#boutonGadget_0, 120,80, 50, 30, "texte" )
ButtonGadget(#boutonGadget_1, 440,180, 50, 30, "texte" )
ButtonGadget(#boutonGadget_2, 240,390, 50, 30, "texte" )
ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "texte" )
Delay(2)
DisableGadget(#ImageGadget,1)
SetGadgetState(#ImageGadget,ImageID(#Image_1))
EndProcedure
OpenWindow(#Fenetre, 0, 0,winl,winh, "",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateImage(#Image_0,winl,winh)
CreateImage(#Image_1,winl,winh)
StartDrawing(ImageOutput(#Image_0))
Box(0,0,winl,winh,RGB(255,255,255))
StopDrawing()
ImageGadget(#ImageGadget,Posx,Posy,200,200,ImageID(#Image_0))
ButtonGadget(#boutonGadget_0, 120,80, 50, 30, "texte" )
ButtonGadget(#boutonGadget_1, 440,180, 50, 30, "texte" )
ButtonGadget(#boutonGadget_2, 240,390, 50, 30, "texte" )
ButtonGadget(#boutonGadget_3, 620,290, 50, 30, "texte" )
SetGadgetState(#ImageGadget,ImageID(#Image_0))
dessin(Posx,Posy,Posl,Posh)
bm=#False
Repeat
event = WaitWindowEvent(1)
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #boutonGadget_0
Debug "B0"
Case #boutonGadget_1
Debug "B1"
Case #boutonGadget_2
Debug "B2"
Case #boutonGadget_3
Debug "B3"
EndSelect
EndSelect
If event=#WM_MOUSEWHEEL
fleche+Abs(MouseWheelDelta())
fleche=fleche%8
If fleche>7:fleche=7:EndIf
dessin(Posx,Posy,Posl,Posh)
EndIf
If GetAsyncKeyState_(#VK_LBUTTON) Or GetAsyncKeyState_(#VK_RBUTTON)
If event=#WM_RBUTTONUP
bm=#False
EndIf
If event=#WM_LBUTTONUP
bm=#False
EndIf
If event=#WM_LBUTTONDOWN
bm=#True
Posx1 = WindowMouseX(0)-Posx
Posy1 = WindowMouseY(0)-Posy
EndIf
If event=#WM_RBUTTONDOWN
bm=#True
Posl1 = WindowMouseX(0)-Posl
Posh1 = WindowMouseY(0)-Posh
EndIf
EndIf
If event=#WM_MOUSEMOVE
If bm=#True
If GetAsyncKeyState_(#VK_LBUTTON)
Posx = WindowMouseX(0)-Posx1
Posy = WindowMouseY(0)-Posy1
dessin(Posx,Posy,Posl,Posh)
EndIf
EndIf
If GetAsyncKeyState_(#VK_RBUTTON)
Posl=WindowMouseX(0)-Posl1
Posh=WindowMouseY(0)-Posh1
dessin(Posx,Posy,Posl,Posh)
EndIf
EndIf
Until event = #PB_Event_CloseWindow
Ce qui est sur...c'est que FRED a bien dit que PB ne supportait pas bien le chevauchement de deux gadget, qu'il etait pas fait pour ça.Kernidon a écrit :en ce moment, je suis arrivé à nouveau devant le problème des boutons gadgets avec
imagegadget qui les rend inactifs, il qui sont apparent mais voila il bloquent dommage ...