tient voilà un autre exemple avec une grille.
Code : Tout sélectionner
Enumeration
#Win
#Container1
#Container2
#Canvas1
#Canvas2
#Canvas3
#bouton1
#bouton2
#bouton3
EndEnumeration
OpenWindow(#Win, 0, 0, 460, 360, "Canvas Icone", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ContainerGadget(#Container1, 6, 6, 349,349, #PB_Container_Flat)
CloseGadgetList()
SetGadgetColor(#Container1,#PB_Gadget_BackColor, RGB(0,255,0))
DisableGadget(#Container1, 1)
ContainerGadget(#Container2, 8,8, 345,345, #PB_Container_Flat)
CloseGadgetList()
SetGadgetColor(#Container2,#PB_Gadget_BackColor, RGB(255,255,255))
DisableGadget(#Container2, 1)
CanvasGadget(#Canvas1, 10, 10, 341, 341)
CanvasGadget(#Canvas2, 370,10, 17, 17)
CanvasGadget(#Canvas3, 370,60, 17, 17)
ButtonGadget(#bouton1, 400, 10, 50, 20, "Efface")
ButtonGadget(#bouton2, 400, 60, 50, 20, "Data")
ButtonGadget(#bouton3, 400, 110, 50, 20, "Quit")
t=19 ;variable pour mode Step
b=t+1
Structure pixel
x.l
y.l
c.l
EndStructure
Dim pos.pixel(320)
StartDrawing(CanvasOutput(#Canvas1)) ; dessin de la grille
DrawingMode(4)
For iii=0 To 320
For ii=0 To 320
For i=ii To 320
Box(i,iii,t+2,t+2,RGB(128,128,128))
i+t ; Step
Next i
ii+t ; Step
Next ii
iii+t ; Step
Next iii
StopDrawing()
Repeat
Event = WindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = #Canvas1
If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas1, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
If StartDrawing(CanvasOutput(#Canvas1))
x = GetGadgetAttribute(#Canvas1, #PB_Canvas_MouseX)
y = GetGadgetAttribute(#Canvas1, #PB_Canvas_MouseY)
;c=RGBA(0,0,0,0)
c=RGBA(Random(255),Random(255),Random(255),Random(255)) ; couleurs aléatoires pour le fun
FillArea(((x/b)*b)+1,((y/b)*b)+1,RGB(128,128,128),c) ; dessine les couleurs sur la grille avec la souris
StopDrawing()
StartDrawing(CanvasOutput(#Canvas2)) ; dessine icone pixel
Box((x/b),(y/b),1,1,c)
StopDrawing()
EndIf
EndIf
If EventType() = #PB_EventType_RightButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(#Canvas1, #PB_Canvas_Buttons) & #PB_Canvas_RightButton)
If StartDrawing(CanvasOutput(#Canvas1))
x = GetGadgetAttribute(#Canvas1, #PB_Canvas_MouseX)
y = GetGadgetAttribute(#Canvas1, #PB_Canvas_MouseY)
FillArea(x, y,RGB(128,128,128),RGBA(255,255,255,255)) ; efface les couleurs de la grille
StopDrawing()
StartDrawing(CanvasOutput(#Canvas2)) ; efface icone pixel
Box((x/b),(y/b),1,1,RGBA(255,255,255,255))
StopDrawing()
EndIf
EndIf
EndIf
If Event = #PB_Event_Gadget
If EventGadget() = #bouton1 ; efface tout
t=19 ; pour mode Step variable
StartDrawing(CanvasOutput(#Canvas1))
For iii=0 To 320
For ii=0 To 320
For i=ii To 320
FillArea(i+1,iii+1,RGB(128,128,128),RGBA(255,255,255,255)) ;i+1,iii+1 = partie interne de la box pour fillarea
i+t ; Step
Next i
ii+t ; Step
Next ii
iii+t ; Step
Next iii
StopDrawing()
StartDrawing(CanvasOutput(#Canvas2))
Box(0,0,17,17,RGBA(255,255,255,255)) ; efface tous les pixels
StopDrawing()
StartDrawing(CanvasOutput(#Canvas3))
Box(0,0,17,17,RGBA(255,255,255,255)) ; efface tous les pixels
StopDrawing()
EndIf
If EventGadget() = #bouton2 ;lecture de la grille miniature pour obtenir un icône
uuu=0
For u=0 To 16
For uu=0 To 16
pos(uuu)\c=16777215 ; pixel du tableau par défaut blanc
pos(uuu)\x=u
pos(uuu)\y=uu
StartDrawing(CanvasOutput(#Canvas2))
pos(uuu)\c=Point(pos(uuu)\x,pos(uuu)\y) ; sauve la couleur et les coordonnées du pixel vers la structure
StopDrawing()
If pos(uuu)\c <> 16777215 ; pas de point blanc
Debug "Data.l "+Str(pos(uuu)\x)+", "+Str(pos(uuu)\y)+", "+Str(pos(uuu)\c) ; création lignes datas
EndIf
StartDrawing(CanvasOutput(#Canvas3))
Box(pos(uuu)\x,pos(uuu)\y,1,1,pos(uuu)\c) ; redessine depuis la structure pour verif.
StopDrawing()
uuu+1
Next uu
Next u
EndIf
If EventGadget() = #bouton3 ; Quit
Break
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End