Re: CanvasGadget Variation
Publié : mer. 16/avr./2014 16:00
Oops bien vu. Le code de base était pas évident à lireblendman a écrit :Sinon, Falsam, y'a une erreur dans ta correction ici ....


Oops bien vu. Le code de base était pas évident à lireblendman a écrit :Sinon, Falsam, y'a une erreur dans ta correction ici ....
Code : Tout sélectionner
Enumeration Window
#Fenetre_Principale
#Fenetre_ChxBrush ;sous fenetre Brush
#Fenetre_ChxLine ;sous fenetre Line
#Fenetre_ChxObjet ;sous fenetre Objet
EndEnumeration
Enumeration
#BarreMenu
#IMAGE_Content ; stores the previous CanvasGadget content while the mouse is down
#IMAGE_Color
#IMAGE_LoadSave
#GADGET_Canvas
#GADGET_Color
;gadgets de la fenetre principale
#GADGET_Brush0 : #GADGET_Line0 : #GADGET_Box0 : #GADGET_Txt :#GADGET_Fill ;#######!!!!!!finir par #GADGET_Fill a cause du for to ligne 289
#GADGET_TailleTxt : #GADGET_PosX: #GADGET_PosY
;gadgets de la fenetre principale menu
#GADGET_Clear
#GADGET_Load
#GADGET_Save
;gadgets de des sous fenetres
#GADGET_Brush1 : #GADGET_Brush2: #GADGET_Brush3:#GADGET_Brush4:#GADGET_Brush5
#GADGET_Line1 : #GADGET_Line2 : #GADGET_Line3 : #GADGET_Line4:#GADGET_Line5
#GADGET_BoxBox : #GADGET_Box : #GADGET_CircleCircle : #GADGET_Circle ; #GADGET_Triangle
EndEnumeration
;####################################################################### PARAM PERSO ##########
#Author ="PB"
#TitleMain ="CanvasGadget Variation"
#Title = #TitleMain+" "+#Author
#NbButton = 20:#Pmmenu=30
#PasButton=5 ;espace vide entre fin bouton et fin écran
#GADGET_TTxt = 2 ;taille texte par defaut
#ChxButtonDflt =#GADGET_Brush0 ; bouton par défaut
#Taille11=1:#Taille12=2:#Taille13=4:#Taille14=6:#Taille15=8 ;taille du point 1 à 5
#ChxCol = "Choix de la couleur"
#Outil1 ="Pinceau"
#Outil2 ="Ligne"
#Outil3 ="Forme"
#Outil41 ="Texte":#Outil42 ="Taille du texte"
Global Event, WEvent, MEvent, GEvent, TEvent
Global CurrentColor, CurrentMode, StartX, StartY
Global NbDess=0 , EnregDess=0
Global Larg, Haut, Coul ,CentreX, CentreY, TailleButtonX.l, TailleButtonY.l
Global TailleTxt , TailleButtonX = 40, TailleButtonY= 40
Global obj1dflt = 12, obj2dflt = 21, obj3dflt = 31
;####################################################################### FIN PARAM PERSO ##########
Procedure ChxBrush()
nb_button=5
If OpenWindow(#Fenetre_ChxBrush, 0, #Pmmenu+TailleButtonY*2, TailleButtonX*nb_button, TailleButtonY, #Title, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Brush1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(11), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(12), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(13), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(14), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(15), #PB_Button_Toggle)
If obj1dflt=11: SetGadgetState(#GADGET_Brush1, 1) :EndIf
If obj1dflt=12: SetGadgetState(#GADGET_Brush2, 1) :EndIf
If obj1dflt=13: SetGadgetState(#GADGET_Brush3, 1) :EndIf
If obj1dflt=14: SetGadgetState(#GADGET_Brush4, 1) :EndIf
If obj1dflt=15: SetGadgetState(#GADGET_Brush5, 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
;
Select GEvent
Case #GADGET_Brush1
obj1dflt=11:SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)):Event = #PB_Event_CloseWindow
Case #GADGET_Brush2
obj1dflt=12:SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)):Event = #PB_Event_CloseWindow
Case #GADGET_Brush3
obj1dflt=13:SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)):Event = #PB_Event_CloseWindow
Case #GADGET_Brush4
obj1dflt=14:SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)):Event = #PB_Event_CloseWindow
Case #GADGET_Brush5
obj1dflt=15:SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)):Event = #PB_Event_CloseWindow
EndSelect
;- Gestion sélection
EventGadget = EventGadget()
For Gadget = #GADGET_Brush1 To #GADGET_Brush5
If Gadget = EventGadget
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
Until Event = #PB_Event_CloseWindow
EndIf
EndProcedure
;-
Procedure ChxLine()
nb_button=5
If OpenWindow(#Fenetre_ChxLine, 0, #Pmmenu+TailleButtonY*3, TailleButtonX*nb_button, TailleButtonY, #Title, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Line1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(21), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(22), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(23), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(24), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(25), #PB_Button_Toggle)
EndIf
EndProcedure
;-
Procedure ChxObjet()
nb_button=4
If OpenWindow(#Fenetre_ChxObjet, 0, #Pmmenu+TailleButtonY*4, TailleButtonX*nb_button, TailleButtonY, #Title, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_BoxBox, 0 , 0, TailleButtonX, TailleButtonY, ImageID(31), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Box, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(32), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_CircleCircle, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(33), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Circle , TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(34), #PB_Button_Toggle)
EndIf
EndProcedure
;-
;-
NbDess=0 : EnregDess=0
; Liste les bureaux
If ExamineDesktops()
Larg = DesktopWidth(0) ; Largeur actuelle
Haut = DesktopHeight(0) ; Hauteur actuelle
Coul = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX=Width/2
CentreY=Height/2
EndIf
For fontes=0 To 20
LoadFont(fontes, "Arial", fontes+5 *(fontes+1))
Next fontes
;-Image boutons
;********************************************************************************************************
;================================================================================================créer image boutons=====================================
;================================================================================================créer image boutons=====================================
;================================================================================================créer image boutons=====================================
;###points
If CreateImage(11, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(11))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, #Taille11, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(12, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(12))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, #Taille12, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(13, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(13))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, #Taille13, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(14, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(14))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, #Taille14, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(15, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(15))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, #Taille15, 0)
StopDrawing()
EndIf
EndIf
;
;
;
;###traits
If CreateImage(21, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(21))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
LineXY(#PasButton*2, TailleButtonY/2, TailleButtonX-#PasButton*2, TailleButtonY/2, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(22, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(22))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
LineXY(#PasButton*2, TailleButtonY/2, TailleButtonX-#PasButton*2, TailleButtonY/2, 0)
LineXY(#PasButton*2, TailleButtonY/2+1, TailleButtonX-#PasButton*2, TailleButtonY/2+1, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(23, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(23))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
LineXY(#PasButton*2, (TailleButtonY-2)/2, TailleButtonX-#PasButton*2, (TailleButtonY-2)/2, 0)
LineXY(#PasButton*2, (TailleButtonY-2)/2+1, TailleButtonX-#PasButton*2, (TailleButtonY-2)/2+1, 0)
LineXY(#PasButton*2, (TailleButtonY-2)/2+2, TailleButtonX-#PasButton*2, (TailleButtonY-2)/2+2, 0)
LineXY(#PasButton*2, (TailleButtonY-2)/2+3, TailleButtonX-#PasButton*2, (TailleButtonY-2)/2+3, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(24, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(24))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
LineXY(#PasButton*2, (TailleButtonY-4)/2, TailleButtonX-#PasButton*2, (TailleButtonY-4)/2, 0)
LineXY(#PasButton*2, (TailleButtonY-4)/2+1, TailleButtonX-#PasButton*2, (TailleButtonY-4)/2+1, 0)
LineXY(#PasButton*2, (TailleButtonY-4)/2+2, TailleButtonX-#PasButton*2, (TailleButtonY-4)/2+2, 0)
LineXY(#PasButton*2, (TailleButtonY-4)/2+3, TailleButtonX-#PasButton*2, (TailleButtonY-4)/2+3, 0)
LineXY(#PasButton*2, (TailleButtonY-4)/2+4, TailleButtonX-#PasButton*2, (TailleButtonY-4)/2+4, 0)
LineXY(#PasButton*2, (TailleButtonY-4)/2+5, TailleButtonX-#PasButton*2, (TailleButtonY-4)/2+5, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(25, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(25))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
LineXY(#PasButton*2, (TailleButtonY-6)/2, TailleButtonX-#PasButton*2, (TailleButtonY-6)/2, 0)
LineXY(#PasButton*2, (TailleButtonY-6)/2+1, TailleButtonX-#PasButton*2, (TailleButtonY-6)/2+1, 0)
LineXY(#PasButton*2, (TailleButtonY-6)/2+2, TailleButtonX-#PasButton*2, (TailleButtonY-6)/2+2, 0)
LineXY(#PasButton*2, (TailleButtonY-6)/2+3, TailleButtonX-#PasButton*2, (TailleButtonY-6)/2+3, 0)
LineXY(#PasButton*2, (TailleButtonY-6)/2+4, TailleButtonX-#PasButton*2, (TailleButtonY-6)/2+4, 0)
LineXY(#PasButton*2, (TailleButtonY-6)/2+5, TailleButtonX-#PasButton*2, (TailleButtonY-6)/2+5, 0)
LineXY(#PasButton*2, (TailleButtonY-6)/2+6, TailleButtonX-#PasButton*2, (TailleButtonY-6)/2+6, 0)
LineXY(#PasButton*2, (TailleButtonY-6)/2+7, TailleButtonX-#PasButton*2, (TailleButtonY-6)/2+7, 0)
StopDrawing()
EndIf
EndIf
;
;
;
;###formes
If CreateImage(31, TailleButtonX, TailleButtonY ) ;carré
If StartDrawing(ImageOutput(31))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Box((TailleButtonX-TailleButtonX/2.5)/2,(TailleButtonY-TailleButtonY/2.5)/2,TailleButtonX/2.5,TailleButtonY/2.5,0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(32, TailleButtonX, TailleButtonY ) ;rectangle
If StartDrawing(ImageOutput(32))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Box((TailleButtonX-TailleButtonX/1.3)/2,(TailleButtonY-TailleButtonY/2.5)/2,TailleButtonX/1.3,TailleButtonY/2.5,0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(33, TailleButtonX, TailleButtonY ) ;rond
If StartDrawing(ImageOutput(33))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Ellipse((TailleButtonX-TailleButtonX/16+1)/2,(TailleButtonY-TailleButtonY/16+1)/2, 12, 12, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(34, TailleButtonX, TailleButtonY ) ;ellipse
If StartDrawing(ImageOutput(34))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
Ellipse((TailleButtonX-TailleButtonX/10+4)/2,(TailleButtonY-TailleButtonY/17+1)/2, 17, 10, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(41, TailleButtonX, TailleButtonY ) ;ellipse
If StartDrawing(ImageOutput(41))
DrawingMode(1)
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
DrawText(8,15, "A Z", 0)
StopDrawing()
EndIf
EndIf
;================================================================================================procedures abouties=====================================
;================================================================================================procedures abouties=====================================
;================================================================================================procedures abouties=====================================
Procedure LoadDessin()
File$ = OpenFileRequester("Charger l'image...", "", "JPEG Images|*.jpg|All Files|*.*", 0)
If File$
If LoadImage(#IMAGE_LoadSave, File$)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
DrawImage(ImageID(#IMAGE_LoadSave), 0, 0)
StopDrawing():NbDess=0
EndIf
FreeImage(#IMAGE_LoadSave)
Else
MessageRequester(#TitleMain, "Impossible de charger l'image: " + File$)
EndIf
EndIf
NbDess=0
EndProcedure
Procedure SaveDessin()
If NbDess<>0
File$ = SaveFileRequester("Enregistrer l'image...", File$, "JPEG Images|*.jpg|All Files|*.*", 0)
If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If CreateImage(#IMAGE_LoadSave, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSave))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing():EnregDess=1
If SaveImage(#IMAGE_LoadSave, File$+".jpg", #PB_ImagePlugin_JPEG) = 0
MessageRequester(#TitleMain, "Impossible d'enregistrer l'image: " + File$)
EndIf
FreeImage(#IMAGE_LoadSave)
EndIf
EndIf
NbDess=0 :EnregDess=1
EndIf
EndProcedure
Procedure Va_effacer()
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX, Haut, $FFFFFF)
StopDrawing()
EndIf
NbDess=0
EndProcedure
;********************************************************************************************************
;********************************************************************************************************
;********************************************************************************************************
; Draw the mouse action result depending on the currently selected mode and event type
Procedure DrawAction(x, y, EventType)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Select CurrentMode
Case #GADGET_Brush0
If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
If obj1dflt=11:obj1taille=#Taille11:EndIf
If obj1dflt=12:obj1taille=#Taille12:EndIf
If obj1dflt=13:obj1taille=#Taille13:EndIf
If obj1dflt=14:obj1taille=#Taille14:EndIf
If obj1dflt=15:obj1taille=#Taille15:EndIf
Circle(x, y, obj1taille, CurrentColor)
EndIf
Case #GADGET_Line0
DrawImage(ImageID(#IMAGE_Content), 0, 0)
LineXY(StartX, StartY, x, y, CurrentColor)
Case #GADGET_Box0
DrawImage(ImageID(#IMAGE_Content), 0, 0)
If x > StartX And y < StartY:Box(StartX, StartY,-StartX+x,StartX-x,CurrentColor):EndIf ;HautDroit
If x > StartX And y > StartY:Box(StartX, StartY, y-StartY, y-StartY, CurrentColor):EndIf;BasDroit
If x < StartX And y< StartY :Box(StartX, StartY, x-StartX, x-StartX, CurrentColor):EndIf;HautGauche
If x < StartX And y> StartY :Box(StartX, StartY,-StartX+x,StartX-x,CurrentColor):EndIf;BasGauche
Case #GADGET_Fill
If EventType = #PB_EventType_LeftButtonDown
FillArea(x, y, -1, CurrentColor)
EndIf
Case #GADGET_Txt
If EventType = #PB_EventType_LeftButtonDown
DrawingMode(1)
text.s=InputRequester(#TitleMain,"Saisissez votre texte:","")
DrawingFont(FontID(TailleTxt))
DrawText(StartX,StartY, text, CurrentColor)
EndIf
EndSelect
StopDrawing()
EndIf
EndProcedure
UseJPEGImageDecoder()
UseJPEGImageEncoder()
CurrentColor = $000000
CurrentMode = #ChxButtonDflt
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content, Larg+TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24)
If OpenWindow(#Fenetre_Principale, 0, 0, Larg+TailleButtonX-#PasButton*10, #PmMenu+Haut, #Title, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
;-ToolBar
CreateToolBar(#BarreMenu, WindowID(#Fenetre_Principale))
ToolBarStandardButton(#GADGET_Clear, #PB_ToolBarIcon_New)
ToolBarStandardButton(#GADGET_Load, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#GADGET_Save, #PB_ToolBarIcon_Save)
CanvasGadget(#GADGET_Canvas,TailleButtonX+#PasButton,#Pmmenu+0,#Pmmenu+Larg-TailleButtonX,Haut-#Pmmenu, #PB_Canvas_ClipMouse)
TextGadget(#GADGET_PosX, 2, #Pmmenu+0, TailleButtonX, TailleButtonY/2, "PosX") ;positionX
TextGadget(#GADGET_PosY, 2, #Pmmenu+TailleButtonY/2, TailleButtonX, TailleButtonY/2, "PosY") ;positionY
ButtonImageGadget(#GADGET_Color, 2, #Pmmenu+TailleButtonY, TailleButtonX, TailleButtonY, ImageID(#IMAGE_Color))
GadgetToolTip(#GADGET_Color, #ChxCol)
ButtonImageGadget(#GADGET_Brush0, 2, #Pmmenu+TailleButtonY*2, TailleButtonX, TailleButtonY, ImageID(obj1dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Brush0,#Outil1)
ButtonImageGadget(#GADGET_Line0, 2, #Pmmenu+TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(obj2dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Line0,#Outil2)
ButtonImageGadget(#GADGET_Box0, 2, #Pmmenu+TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(obj3dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Box0, #Outil3)
ButtonGadget(#GADGET_Fill, 2, #Pmmenu+TailleButtonY*5, TailleButtonX, TailleButtonY, "Remplir", #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Txt, 2, #Pmmenu+TailleButtonY*6, TailleButtonX, TailleButtonY, ImageID(41), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Txt, #Outil41)
SpinGadget(#GADGET_TailleTxt, 2, #Pmmenu+TailleButtonY*7, TailleButtonX, TailleButtonY, 1, 20 , #PB_Spin_ReadOnly) ;taille texte
SetGadgetState (#GADGET_TailleTxt, #GADGET_TTxt) : SetGadgetText(#GADGET_TailleTxt, Str(#GADGET_TTxt)) ; définit la valeur initiale
GadgetToolTip(#GADGET_TailleTxt, #Outil42)
TailleTxt = GetGadgetState(#GADGET_TailleTxt)
SetGadgetState(#ChxButtonDflt, 1)
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
;-Boucle évenementielle
Repeat
;- 00 - Capture des évenements utiles à cette application
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
;- 01 - Evenement MENU
Case #PB_Event_Menu
Select MEvent
Case #GADGET_Clear
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNoCancel) ; o=6 / n=7 / cancel=2
If Resultat=6
SaveDessin()
EndIf
If Resultat<>2 :NbDess=0
va_effacer()
EndIf
EndIf
If NbDess=0: va_effacer() :EndIf
Case #GADGET_Load
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNoCancel) ; o=6 / n=7 / cancel=2
If Resultat=6
SaveDessin()
EndIf
EndIf
If Resultat=6 Or Resultat=7 Or NbDess=0
LoadDessin()
EndIf
Case #GADGET_Save
SaveDessin()
EndSelect
Case #PB_Event_Gadget
;- 02 - Evenement FEUILLE
;Affichage des coordonnées de la souris
If x<0:x=0:EndIf:If y<0:y=0:EndIf
SetGadgetText (#GADGET_PosX,"X: "+Str(x))
SetGadgetText (#GADGET_PosY,"Y: "+Str(y))
Select GEvent
Case #GADGET_Canvas
X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
Select TEvent
Case #PB_EventType_LeftButtonDown
;
; This stores the current content of the CanvasGadget in #IMAGE_Content,
; so it can be re-drawn While the mouse moves
;
If StartDrawing(ImageOutput(#IMAGE_Content))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
EndIf
NbDess=NbDess+1:EnregDess=0
texte$= Str(NbDess) + " : "+ Str(EnregDess)
Debug texte$
StartX = X
StartY = Y
DrawAction(X, Y, TEvent)
Case #PB_EventType_LeftButtonUp
DrawAction(X, Y, TEvent)
Case #PB_EventType_MouseMove
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
DrawAction(X, Y, TEvent)
EndIf
EndSelect
;- 03 - Evenement SANS SELECTION
Case #GADGET_Color
LastColor = CurrentColor ;met en mémoire la couleur actuelle au cas où ColorRequester fermé avec la croix
CurrentColor = ColorRequester(CurrentColor)
If CurrentColor> -1
If StartDrawing(ImageOutput(#IMAGE_Color))
Box(0,0, 35, 35, CurrentColor)
StopDrawing()
SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
EndIf
Else
CurrentColor= LastColor ;remet la couleur précédente en mémoire si fermé avec la croix
EndIf
Case #GADGET_TailleTxt
SetGadgetText(#GADGET_TailleTxt,Str(GetGadgetState(#GADGET_TailleTxt))) ;taille du texte MEMOIRE+AFFICAHGE
TailleTxt = GetGadgetState(#GADGET_TailleTxt)
;- 04 - Evenement AVEC SELECTION
Case #GADGET_Brush0, #GADGET_Line0, #GADGET_Box0, #GADGET_Fill, #GADGET_Txt;gère la sélection de l'outil
EventGadget = EventGadget()
For Gadget = #GADGET_Brush0 To #GADGET_Fill
If Gadget = EventGadget
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
CurrentMode = GEvent
If GEvent=#GADGET_Brush0
ChxBrush() ;MessageRequester("brush","")
EndIf
If GEVENT=#GADGET_Line0
ChxLine();MessageRequester("line","")
EndIf
If GEVENT=#GADGET_Box0
ChxObjet();MessageRequester("objet","")
EndIf
; Case #GADGET_Brush1
; Case #GADGET_Brush2
; Case #GADGET_Brush3
; Case #GADGET_Brush4
; Case #GADGET_Brush5
EndSelect
Case #PB_Event_CloseWindow
;-05 - Fermeture du programme
Select WEvent
Case #Fenetre_Principale
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNo) ; o=6 / n=7
If Resultat=6
SaveDessin()
EndIf
EndIf
End
Case #Fenetre_ChxBrush
CloseWindow(#Fenetre_ChxBrush)
EndSelect
EndSelect
ForEver
EndIf
Code : Tout sélectionner
Enumeration
#BarreMenu
#IMAGE_Content ; stores the previous CanvasGadget content while the mouse is down
#IMAGE_Color
#IMAGE_LoadSave
#GADGET_Canvas
#GADGET_Color
etc...
EndEnumeration
Code : Tout sélectionner
Enumeration
#IMAGE_Content ; stores the previous CanvasGadget content while the mouse is down
#IMAGE_Color
#IMAGE_LoadSave
EndEnumeration
Enumeration
#GADGET_Canvas
#GADGET_Color
EndEnumeration
etc...
Code : Tout sélectionner
If CreateImage(11, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(11))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, #Taille11, 0)
StopDrawing()
EndIf
EndIf
;
If CreateImage(12, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(12))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, #Taille12, 0)
StopDrawing()
EndIf
EndIf
ETC....
Code : Tout sélectionner
Procedure CreateBtn(id = 11, taille = #Taille11)
If CreateImage(id, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, taille, 0)
StopDrawing()
EndIf
EndIf
EndProcedure
CreateBtn(11, #Taille11)
CreateBtn(12, #Taille12)
CreateBtn(13, #Taille13)
CreateBtn(14, #Taille14)
CreateBtn(15, #Taille15)
Code : Tout sélectionner
2. la fentre #Fenetre_ChxBrush ne se referme pas quand j'ai cliqué sur un brush :
Code : Tout sélectionner
3b. la fenetre #Fenetre_ChxLine ne veut pas se fermer
Code : Tout sélectionner
;{ Infos
; infos sur besoin, date, auteur, version pb, etc...
;}
;{ Enumeration & Constantes
Enumeration Window
#Fenetre_Principale
#Fenetre_ChxBrush ;sous fenetre Brush
#Fenetre_ChxLine ;sous fenetre Line
#Fenetre_ChxObjet ;sous fenetre Objet
EndEnumeration
Enumeration ; le menu
#BarreMenu
EndEnumeration
Enumeration ; LEs images
#IMAGE_Content ; stores the previous CanvasGadget content while the mouse is down
#IMAGE_Color
#IMAGE_LoadSave
EndEnumeration
Enumeration ; les gadgets
#GADGET_Canvas
#GADGET_Color
;gadgets de la fenetre principale
#GADGET_Brush0 : #GADGET_Line0 : #GADGET_Box0 : #GADGET_Txt :#GADGET_Fill ;#######!!!!!!finir par #GADGET_Fill a cause du for to ligne 289
#GADGET_TailleTxt : #GADGET_PosX: #GADGET_PosY
;gadgets de la fenetre principale menu
#GADGET_Clear
#GADGET_Load
#GADGET_Save
;gadgets de des sous fenetres
#GADGET_Brush1 : #GADGET_Brush2: #GADGET_Brush3:#GADGET_Brush4:#GADGET_Brush5
#GADGET_Line1 : #GADGET_Line2 : #GADGET_Line3 : #GADGET_Line4:#GADGET_Line5
#GADGET_BoxBox : #GADGET_Box : #GADGET_CircleCircle : #GADGET_Circle ; #GADGET_Triangle
EndEnumeration
#Author ="PB"
#TitleMain ="CanvasGadget Variation"
#Title = #TitleMain +" "+ #Author
#NbButton = 20
#Pmmenu = 30
#PasButton = 5 ;espace vide entre fin bouton et fin écran
#GADGET_TTxt = 2 ;taille texte par defaut
#ChxButtonDflt =#GADGET_Brush0 ; bouton par défaut
;taille du point 1 à 5
#Taille11=1
#Taille12=2
#Taille13=4
#Taille14=6
#Taille15=8
#ChxCol = "Choix de la couleur"
#Outil1 = "Pinceau"
#Outil2 = "Ligne"
#Outil3 = "Forme"
#Outil41 = "Texte"
#Outil42 = "Taille du texte"
;}
;{ Variables
Global Event, WEvent, MEvent, GEvent, TEvent
Global CurrentColor = $000000, CurrentMode= #ChxButtonDflt, StartX, StartY
Global NbDess=0 , EnregDess=0
Global Larg, Haut, Coul ,CentreX, CentreY, TailleButtonX.l, TailleButtonY.l
Global TailleTxt , TailleButtonX = 40, TailleButtonY= 40
Global obj1dflt = 12, obj2dflt = 21, obj3dflt = 31
;}
;{ Les procedures
Procedure ChxBrush()
nb_button=5
If OpenWindow(#Fenetre_ChxBrush, 0, #Pmmenu+TailleButtonY*2, TailleButtonX*nb_button, TailleButtonY, #Title, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Brush1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(11), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(12), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(13), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(14), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(15), #PB_Button_Toggle)
If obj1dflt=11: SetGadgetState(#GADGET_Brush1, 1) :EndIf
If obj1dflt=12: SetGadgetState(#GADGET_Brush2, 1) :EndIf
If obj1dflt=13: SetGadgetState(#GADGET_Brush3, 1) :EndIf
If obj1dflt=14: SetGadgetState(#GADGET_Brush4, 1) :EndIf
If obj1dflt=15: SetGadgetState(#GADGET_Brush5, 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #GADGET_Brush1
obj1dflt=11 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush2
obj1dflt=12 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush3
obj1dflt=13 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush4
obj1dflt=14 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush5
obj1dflt=15 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Brush1 To #GADGET_Brush5
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
Until Event = #PB_Event_CloseWindow Or quit = 1
EndIf
CloseWindow(#Fenetre_ChxBrush)
EndProcedure
Procedure ChxLine()
nb_button=5
If OpenWindow(#Fenetre_ChxLine, 0, #Pmmenu+TailleButtonY*3, TailleButtonX*nb_button, TailleButtonY, #Title, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Line1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(21), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(22), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(23), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(24), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(25), #PB_Button_Toggle)
EndIf
EndProcedure
Procedure ChxObjet()
nb_button=4
If OpenWindow(#Fenetre_ChxObjet, 0, #Pmmenu+TailleButtonY*4, TailleButtonX*nb_button, TailleButtonY, #Title, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_BoxBox, 0 , 0, TailleButtonX, TailleButtonY, ImageID(31), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Box, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(32), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_CircleCircle, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(33), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Circle , TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(34), #PB_Button_Toggle)
EndIf
EndProcedure
;{ Creation des interfaces
; Création des images pour les outils (brush - points)
Procedure CreateBtn(id, taille)
If CreateImage(id, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, taille, 0)
StopDrawing()
EndIf
EndIf
EndProcedure
; Creation des images pour les lignes
Procedure CreateLine(id, nombre)
If CreateImage(id, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
For i = 0 To nombre
LineXY(#PasButton*2, TailleButtonY/2 + i, TailleButtonX - #PasButton*2, TailleButtonY/2 + i, 0)
Next i
StopDrawing()
EndIf
EndIf
EndProcedure
; Forme caré...
Procedure CreateForm(id, valeur=0, TypeDeForme=0)
; typeDeForme
; 0 : box
; 1 : ellipse 1
; 2 : ellipse 2
; 3 : texte
If CreateImage(id, TailleButtonX, TailleButtonY ) ;carré
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Select TypeDeForme
Case 0 :
Box((TailleButtonX - TailleButtonX/valeur)/2,(TailleButtonY - TailleButtonY/2.5)/2, TailleButtonX/valeur, TailleButtonY/2.5,0)
Case 1 :
Ellipse((TailleButtonX - TailleButtonX/16 +1)/2,(TailleButtonY - TailleButtonY/16 + 1)/2, 12, 12, 0)
Case 2 :
Ellipse((TailleButtonX-TailleButtonX/10+4)/2,(TailleButtonY-TailleButtonY/17+1)/2, 17, 10, 0)
Case 3 :
DrawingMode(#PB_2DDrawing_Transparent )
DrawText(8,15, "A Z", 0)
EndSelect
StopDrawing()
EndIf
EndIf
EndProcedure
;}
; Open, save fonctions
Procedure LoadDessin()
File$ = OpenFileRequester("Charger l'image...", "", "JPEG Images|*.jpg|All Files|*.*", 0)
If File$
If LoadImage(#IMAGE_LoadSave, File$)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
DrawImage(ImageID(#IMAGE_LoadSave), 0, 0)
StopDrawing():NbDess=0
EndIf
FreeImage(#IMAGE_LoadSave)
Else
MessageRequester(#TitleMain, "Impossible de charger l'image: " + File$)
EndIf
EndIf
NbDess=0
EndProcedure
Procedure SaveDessin()
If NbDess<>0
File$ = SaveFileRequester("Enregistrer l'image...", File$, "JPEG Images|*.jpg|All Files|*.*", 0)
If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If CreateImage(#IMAGE_LoadSave, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSave))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing():EnregDess=1
If SaveImage(#IMAGE_LoadSave, File$+".jpg", #PB_ImagePlugin_JPEG) = 0
MessageRequester(#TitleMain, "Impossible d'enregistrer l'image: " + File$)
EndIf
FreeImage(#IMAGE_LoadSave)
EndIf
EndIf
NbDess=0 :EnregDess=1
EndIf
EndProcedure
Procedure Va_effacer()
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX, Haut, $FFFFFF)
StopDrawing()
EndIf
NbDess=0
EndProcedure
; Draw the mouse action result depending on the currently selected mode and event type
Procedure DrawAction(x, y, EventType)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Select CurrentMode
Case #GADGET_Brush0
If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
If obj1dflt=11:obj1taille=#Taille11:EndIf
If obj1dflt=12:obj1taille=#Taille12:EndIf
If obj1dflt=13:obj1taille=#Taille13:EndIf
If obj1dflt=14:obj1taille=#Taille14:EndIf
If obj1dflt=15:obj1taille=#Taille15:EndIf
Circle(x, y, obj1taille, CurrentColor)
EndIf
Case #GADGET_Line0
DrawImage(ImageID(#IMAGE_Content), 0, 0)
LineXY(StartX, StartY, x, y, CurrentColor)
Case #GADGET_Box0
DrawImage(ImageID(#IMAGE_Content), 0, 0)
If x > StartX And y < StartY:Box(StartX, StartY,-StartX+x,StartX-x,CurrentColor):EndIf ;HautDroit
If x > StartX And y > StartY:Box(StartX, StartY, y-StartY, y-StartY, CurrentColor):EndIf;BasDroit
If x < StartX And y< StartY :Box(StartX, StartY, x-StartX, x-StartX, CurrentColor):EndIf;HautGauche
If x < StartX And y> StartY :Box(StartX, StartY,-StartX+x,StartX-x,CurrentColor):EndIf;BasGauche
Case #GADGET_Fill
If EventType = #PB_EventType_LeftButtonDown
FillArea(x, y, -1, CurrentColor)
EndIf
Case #GADGET_Txt
If EventType = #PB_EventType_LeftButtonDown
DrawingMode(1)
text.s=InputRequester(#TitleMain,"Saisissez votre texte:","")
DrawingFont(FontID(TailleTxt))
DrawText(StartX,StartY, text, CurrentColor)
EndIf
EndSelect
StopDrawing()
EndIf
EndProcedure
;}
;{ Initialisation
; Liste les bureaux
If ExamineDesktops()
Larg = DesktopWidth(0) ; Largeur actuelle
Haut = DesktopHeight(0) ; Hauteur actuelle
Coul = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX = Width/2
CentreY = Height/2
EndIf
; POlice d'écritures
For fontes = 0 To 20
LoadFont(fontes, "Arial", fontes + 5 *(fontes+1))
Next fontes
If UseJPEGImageDecoder() : EndIf
If UseJPEGImageEncoder() : EndIf
;}
;{ Les images
;###points
CreateBtn(11, #Taille11)
CreateBtn(12, #Taille12)
CreateBtn(13, #Taille13)
CreateBtn(14, #Taille14)
CreateBtn(15, #Taille15)
;###traits
CreateLine(21, 0)
CreateLine(22, 1)
CreateLine(23, 3)
CreateLine(24, 5)
CreateLine(25, 7)
;###formes
CreateForm(31, 2.5)
CreateForm(32, 1.3)
CreateForm(33, 0, 1)
CreateForm(34, 0, 2)
; Texte
CreateForm(41, 0, 3)
; autres images
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content, Larg+TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24)
;}
;{ ouverture de la fenêtre
Flag = #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered
If OpenWindow(#Fenetre_Principale, 0, 0, Larg+TailleButtonX-#PasButton*10, #PmMenu+Haut, #Title, Flag)
;{ ToolBar
CreateToolBar(#BarreMenu, WindowID(#Fenetre_Principale))
ToolBarStandardButton(#GADGET_Clear, #PB_ToolBarIcon_New)
ToolBarStandardButton(#GADGET_Load, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#GADGET_Save, #PB_ToolBarIcon_Save)
;}
;{ Les gadgets
CanvasGadget(#GADGET_Canvas,TailleButtonX+#PasButton,#Pmmenu+0,#Pmmenu+Larg-TailleButtonX,Haut-#Pmmenu, #PB_Canvas_ClipMouse)
TextGadget(#GADGET_PosX, 2, #Pmmenu+0, TailleButtonX, TailleButtonY/2, "PosX") ;positionX
TextGadget(#GADGET_PosY, 2, #Pmmenu+TailleButtonY/2, TailleButtonX, TailleButtonY/2, "PosY") ;positionY
ButtonImageGadget(#GADGET_Color, 2, #Pmmenu+TailleButtonY, TailleButtonX, TailleButtonY, ImageID(#IMAGE_Color))
GadgetToolTip(#GADGET_Color, #ChxCol)
ButtonImageGadget(#GADGET_Brush0, 2, #Pmmenu+TailleButtonY*2, TailleButtonX, TailleButtonY, ImageID(obj1dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Brush0,#Outil1)
ButtonImageGadget(#GADGET_Line0, 2, #Pmmenu+TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(obj2dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Line0,#Outil2)
ButtonImageGadget(#GADGET_Box0, 2, #Pmmenu+TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(obj3dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Box0, #Outil3)
ButtonGadget(#GADGET_Fill, 2, #Pmmenu+TailleButtonY*5, TailleButtonX, TailleButtonY, "Remplir", #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Txt, 2, #Pmmenu+TailleButtonY*6, TailleButtonX, TailleButtonY, ImageID(41), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Txt, #Outil41)
SpinGadget(#GADGET_TailleTxt, 2, #Pmmenu+TailleButtonY*7, TailleButtonX, TailleButtonY, 1, 20 , #PB_Spin_ReadOnly) ;taille texte
SetGadgetState (#GADGET_TailleTxt, #GADGET_TTxt) : SetGadgetText(#GADGET_TailleTxt, Str(#GADGET_TTxt)) ; définit la valeur initiale
GadgetToolTip(#GADGET_TailleTxt, #Outil42)
TailleTxt = GetGadgetState(#GADGET_TailleTxt)
SetGadgetState(#ChxButtonDflt, 1)
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
;}
Else
End
EndIf
;}
;{ Boucle évenementielle
Repeat
Repeat
;- 00 - Capture des évenements utiles à cette application
Event = WindowEvent()
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
;- 01 - Evenement MENU
;{ Les menus
Case #PB_Event_Menu
Select MEvent
Case #GADGET_Clear
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNoCancel) ; o=6 / n=7 / cancel=2
If Resultat=6
SaveDessin()
EndIf
If Resultat<>2 :NbDess=0
va_effacer()
EndIf
EndIf
If NbDess=0: va_effacer() :EndIf
Case #GADGET_Load
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNoCancel) ; o=6 / n=7 / cancel=2
If Resultat=6
SaveDessin()
EndIf
EndIf
If Resultat=6 Or Resultat=7 Or NbDess=0
LoadDessin()
EndIf
Case #GADGET_Save
SaveDessin()
EndSelect;}
;{ Les gadgets
Case #PB_Event_Gadget
;- 02 - Evenement FEUILLE
;Affichage des coordonnées de la souris
If x<0:x=0 : EndIf
If y<0:y=0 : EndIf
SetGadgetText (#GADGET_PosX,"X: "+Str(x))
SetGadgetText (#GADGET_PosY,"Y: "+Str(y))
Select GEvent
Case #GADGET_Canvas
X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
Select TEvent
Case #PB_EventType_LeftButtonDown
;
; This stores the current content of the CanvasGadget in #IMAGE_Content,
; so it can be re-drawn While the mouse moves
;
If StartDrawing(ImageOutput(#IMAGE_Content))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
EndIf
NbDess=NbDess+1:EnregDess=0
texte$= Str(NbDess) + " : "+ Str(EnregDess)
Debug texte$
StartX = X
StartY = Y
DrawAction(X, Y, TEvent)
Case #PB_EventType_LeftButtonUp
DrawAction(X, Y, TEvent)
Case #PB_EventType_MouseMove
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
DrawAction(X, Y, TEvent)
EndIf
EndSelect
;- 03 - Evenement SANS SELECTION
Case #GADGET_Color
LastColor = CurrentColor ;met en mémoire la couleur actuelle au cas où ColorRequester fermé avec la croix
CurrentColor = ColorRequester(CurrentColor)
If CurrentColor> -1
If StartDrawing(ImageOutput(#IMAGE_Color))
Box(0,0, 35, 35, CurrentColor)
StopDrawing()
SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
EndIf
Else
CurrentColor= LastColor ;remet la couleur précédente en mémoire si fermé avec la croix
EndIf
Case #GADGET_TailleTxt
SetGadgetText(#GADGET_TailleTxt,Str(GetGadgetState(#GADGET_TailleTxt))) ;taille du texte MEMOIRE+AFFICAHGE
TailleTxt = GetGadgetState(#GADGET_TailleTxt)
;- 04 - Evenement AVEC SELECTION
Case #GADGET_Brush0, #GADGET_Line0, #GADGET_Box0, #GADGET_Fill, #GADGET_Txt;gère la sélection de l'outil
EventGadget = EventGadget()
For Gadget = #GADGET_Brush0 To #GADGET_Fill
If Gadget = EventGadget
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
CurrentMode = GEvent
If GEvent=#GADGET_Brush0
ChxBrush() ;MessageRequester("brush","")
EndIf
If GEVENT=#GADGET_Line0
ChxLine();MessageRequester("line","")
EndIf
If GEVENT=#GADGET_Box0
ChxObjet();MessageRequester("objet","")
EndIf
; Case #GADGET_Brush1
; Case #GADGET_Brush2
; Case #GADGET_Brush3
; Case #GADGET_Brush4
; Case #GADGET_Brush5
EndSelect ;}
;{ event closewindow
Case #PB_Event_CloseWindow
;-05 - Fermeture du programme
Select WEvent
Case #Fenetre_Principale
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNo) ; o=6 / n=7
If Resultat=6
SaveDessin()
EndIf
EndIf
End
Default
CloseWindow(WEvent)
EndSelect
EndSelect ;}
Until event = 0
ForEver
;}
Code : Tout sélectionner
;{ Infos
;
; ### LOGICIEL DE DESSIN pour Gaby
; ### Réalisé par david turquin
; ### 22.04.204
; ### V1.0
; ### Compilé sous PureBasic 5.22 LTS (Windows - x86)
; ### Merci a falsam, blendman pour leur aide
; ### Longue vie à PB !
;
;}
;{ Enumeration & Constantes
Enumeration Window
#Fenetre_Principale
#Fenetre_ChxBrush ;sous fenetre Brush
#Fenetre_ChxLine ;sous fenetre Line
#Fenetre_ChxObjet ;sous fenetre Objet
EndEnumeration
Enumeration ; le menu
#BarreMenu
EndEnumeration
Enumeration ; LEs images
#IMAGE_Content ; stores the previous CanvasGadget content while the mouse is down
#IMAGE_Color
#IMAGE_LoadSaveDessin
#IMAGE_LoadSaveTempo
EndEnumeration
Enumeration ; les gadgets
#GADGET_Canvas
#GADGET_Color
;gadgets de la fenetre principale
#GADGET_Brush0 : #GADGET_Line0 : #GADGET_Objet0 : #GADGET_Txt :#GADGET_Fill ;!!! toujours finir par #GADGET_Fill !!! a cause du 'for/to' (Selection + Initialisation)
#GADGET_TailleTxt : #GADGET_PosX: #GADGET_PosY
;gadgets de la fenetre principale menu
#GADGET_Clear
#GADGET_Load
#GADGET_Save
#GADGET_Undo
#GADGET_Redo
;gadgets de des sous fenetres
#GADGET_Brush1 : #GADGET_Brush2: #GADGET_Brush3:#GADGET_Brush4:#GADGET_Brush5
#GADGET_Line1 : #GADGET_Line2 : #GADGET_Line3 : #GADGET_Line4:#GADGET_Line5
#GADGET_Carre1 : #GADGET_Rectangle1 : #GADGET_Rond1 : #GADGET_Ovale1 ; #GADGET_Triangle1
#GADGET_Carre2 : #GADGET_Rectangle2 : #GADGET_Rond2 : #GADGET_Ovale2 ; #GADGET_Triangle2
EndEnumeration
;Author...
#Author ="PB"
#TitleMain ="CanvasGadget Variation"
#Title = #TitleMain +" "+ #Author
;Button & Mode
#NbButton = 20
#Pmmenu = 30
#PasButton = 5 ;espace vide entre fin bouton et fin écran
#GADGET_TTxt = 2 ;taille texte par defaut
#ChxButtonDflt =#GADGET_Brush0 ; bouton par défaut
#ChxModeDflt = #PB_2DDrawing_Default
;Tempo
#NameImageTempo = "Image_" ; nom des images temporaires
#ChemminImageTempo ="tempo" ;dossier des images temporaires
#NbImageTempo = 8 ; nb d'images temporaires (pour Undo/Redo)
;taille du point 1 à 5
#Taille11=1
#Taille12=2
#Taille13=4
#Taille14=6
#Taille15=8
;textes affichés
#ChxCol = "Choix de la couleur"
#Outil1 = "Pinceau"
#Outil2 = "Ligne"
#Outil3 = "Forme" : #Outil31 = "Carré": #Outil32 = "Rectangle": #Outil33 = "Rond": #Outil34 = "Ovale"
#Outil41 = "Texte"
#Outil42 = "Taille du texte"
#Mode1 = " (plein)"
#Mode2 = " (contour)"
;}
;{ Variables
Global Event, WEvent, MEvent, GEvent, TEvent
Global CurrentColor = $000000, CurrentMode= #ChxButtonDflt, StartX, StartY
Global NbDess=0 , EnregDess=0 , ImageEnCours = 0
Global Larg, Haut, Coul ,CentreX, CentreY, TailleButtonX.l, TailleButtonY.l
Global TailleTxt , TailleButtonX = 40, TailleButtonY= 40
Global obj1dflt = 12, obj2dflt = 21, obj3dflt = 31
Global ModeActuel = #ChxModeDflt
Global cheminapp$=GetCurrentDirectory()
;}
;{ Les procedures
Procedure ChxBrush()
nb_button=5
If OpenWindow(#Fenetre_ChxBrush, 0, #Pmmenu+TailleButtonY*2, TailleButtonX*nb_button, TailleButtonY, #Outil1, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Brush1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(11), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(12), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(13), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(14), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(15), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Brush1, "Taille 1")
GadgetToolTip(#GADGET_Brush2, "Taille 2")
GadgetToolTip(#GADGET_Brush3, "Taille 3")
GadgetToolTip(#GADGET_Brush4, "Taille 4")
GadgetToolTip(#GADGET_Brush5, "Taille 5")
If obj1dflt=11: SetGadgetState(#GADGET_Brush1, 1) :EndIf
If obj1dflt=12: SetGadgetState(#GADGET_Brush2, 1) :EndIf
If obj1dflt=13: SetGadgetState(#GADGET_Brush3, 1) :EndIf
If obj1dflt=14: SetGadgetState(#GADGET_Brush4, 1) :EndIf
If obj1dflt=15: SetGadgetState(#GADGET_Brush5, 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #GADGET_Brush1
obj1dflt=11 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush2
obj1dflt=12 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush3
obj1dflt=13 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush4
obj1dflt=14 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush5
obj1dflt=15 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Brush1 To #GADGET_Brush5
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
Until Event = #PB_Event_CloseWindow Or quit = 1
EndIf
CloseWindow(#Fenetre_ChxBrush)
EndProcedure
Procedure ChxLine()
nb_button=5
If OpenWindow(#Fenetre_ChxLine, 0, #Pmmenu+TailleButtonY*3, TailleButtonX*nb_button, TailleButtonY, #Outil2, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Line1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(21), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(22), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(23), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(24), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(25), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Line1, "Taille 1")
GadgetToolTip(#GADGET_Line2, "Taille 2")
GadgetToolTip(#GADGET_Line3, "Taille 3")
GadgetToolTip(#GADGET_Line4, "Taille 4")
GadgetToolTip(#GADGET_Line5, "Taille 5")
If obj2dflt=21: SetGadgetState(#GADGET_Line1, 1) :EndIf
If obj2dflt=22: SetGadgetState(#GADGET_Line2, 1) :EndIf
If obj2dflt=23: SetGadgetState(#GADGET_Line3, 1) :EndIf
If obj2dflt=24: SetGadgetState(#GADGET_Line4, 1) :EndIf
If obj2dflt=25: SetGadgetState(#GADGET_Line5, 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #GADGET_Line1
obj2dflt=21 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
Case #GADGET_Line2
obj2dflt=22 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
Case #GADGET_Line3
obj2dflt=23 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
Case #GADGET_Line4
obj2dflt=24 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
Case #GADGET_Line5
obj2dflt=25 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Line1 To #GADGET_Line5
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
Until Event = #PB_Event_CloseWindow Or quit = 1
EndIf
CloseWindow(#Fenetre_ChxLine)
EndProcedure
Procedure ChxObjet()
nb_button=4 ;par ligne
If OpenWindow(#Fenetre_ChxObjet, 0, #Pmmenu+TailleButtonY*4, TailleButtonX*nb_button, TailleButtonY*2,#Outil3, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
;position button
ButtonImageGadget(#GADGET_Carre1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(31), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Rectangle1, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(32), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Rond1, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(33), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Ovale1 , TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(34), #PB_Button_Toggle)
;
ButtonImageGadget(#GADGET_Carre2, 0 , TailleButtonY, TailleButtonX, TailleButtonY, ImageID(35), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Rectangle2, TailleButtonY, TailleButtonY, TailleButtonX, TailleButtonY, ImageID(36), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Rond2, TailleButtonX*2, TailleButtonY, TailleButtonX, TailleButtonY, ImageID(37), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Ovale2 , TailleButtonX*3, TailleButtonY, TailleButtonX, TailleButtonY, ImageID(38), #PB_Button_Toggle)
;name button
GadgetToolTip(#GADGET_Carre1, #Outil31+#Mode1)
GadgetToolTip(#GADGET_Rectangle1, #Outil32+#Mode1)
GadgetToolTip(#GADGET_Rond1, #Outil33+#Mode1)
GadgetToolTip(#GADGET_Ovale1, #Outil34+#Mode1)
;
GadgetToolTip(#GADGET_Carre2, #Outil31+#Mode2)
GadgetToolTip(#GADGET_Rectangle2, #Outil32+#Mode2)
GadgetToolTip(#GADGET_Rond2, #Outil33+#Mode2)
GadgetToolTip(#GADGET_Ovale2, #Outil34+#Mode2)
;image button
If obj3dflt=31: SetGadgetState(#GADGET_Carre1 , 1) :EndIf
If obj3dflt=32: SetGadgetState(#GADGET_Rectangle1 , 1) :EndIf
If obj3dflt=33: SetGadgetState(#GADGET_Rond1 , 1) :EndIf
If obj3dflt=34: SetGadgetState(#GADGET_Ovale1 , 1) :EndIf
;
If obj3dflt=35: SetGadgetState(#GADGET_Carre2 , 1) :EndIf
If obj3dflt=36: SetGadgetState(#GADGET_Rectangle2 , 1) :EndIf
If obj3dflt=37: SetGadgetState(#GADGET_Rond2 , 1) :EndIf
If obj3dflt=38: SetGadgetState(#GADGET_Ovale2 , 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
;ligne1
Case #GADGET_Carre1
obj3dflt=31 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : ModeActuel = #PB_2DDrawing_Default : quit = 1
Case #GADGET_Rectangle1
obj3dflt=32 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : ModeActuel = #PB_2DDrawing_Default : quit = 1
Case #GADGET_Rond1
obj3dflt=33 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : ModeActuel = #PB_2DDrawing_Default : quit = 1
Case #GADGET_Ovale1
obj3dflt=34 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : ModeActuel = #PB_2DDrawing_Default : quit = 1
;ligne2
Case #GADGET_Carre2
obj3dflt=35 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : ModeActuel = #PB_2DDrawing_Outlined : quit = 1
Case #GADGET_Rectangle2
obj3dflt=36 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : ModeActuel = #PB_2DDrawing_Outlined : quit = 1
Case #GADGET_Rond2
obj3dflt=37 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : ModeActuel = #PB_2DDrawing_Outlined : quit = 1
Case #GADGET_Ovale2
obj3dflt=38 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : ModeActuel = #PB_2DDrawing_Outlined : quit = 1
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Carre1 To #GADGET_Ovale1
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
Until Event = #PB_Event_CloseWindow Or quit = 1
EndIf
CloseWindow(#Fenetre_ChxObjet)
EndProcedure
;{ Creation des interfaces
;-
; Création des images pour les outils (brush - points)
Procedure CreateBtn(id, taille)
If CreateImage(id, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, taille, 0)
StopDrawing()
EndIf
EndIf
EndProcedure
; Creation des images pour les lignes
Procedure CreateLine(id, nombre)
If CreateImage(id, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
For i = 0 To nombre
LineXY(#PasButton*2, TailleButtonY/2 + i, TailleButtonX - #PasButton*2, TailleButtonY/2 + i, 0)
Next i
StopDrawing()
EndIf
EndIf
EndProcedure
; Forme caré...
Procedure CreateForm(id, ModeAffich, valeur=0, TypeDeForme=0)
; typeDeForme
; 0 : boxbox & box (carré & rectangle)
; 1 : circlecircle (rond)
; 2 : circle (ellipse)
; 3 : texte
If CreateImage(id, TailleButtonX, TailleButtonY ) ;carré
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Select TypeDeForme
Case 0 :
DrawingMode(ModeAffich): Box((TailleButtonX - TailleButtonX/valeur)/2,(TailleButtonY - TailleButtonY/3)/2, TailleButtonX/valeur, TailleButtonY/3,0)
Case 1 :
DrawingMode(ModeAffich): Ellipse((TailleButtonX - TailleButtonX/16 +1)/2,(TailleButtonY - TailleButtonY/16 + 1)/2, 10, 10, 0)
Case 2 :
DrawingMode(ModeAffich): Ellipse((TailleButtonX-TailleButtonX/10+4)/2,(TailleButtonY-TailleButtonY/17+1)/2, 15, 10, 0)
Case 3 :
DrawingMode(ModeAffich): DrawText(8,15, "A Z", 0)
EndSelect
StopDrawing()
EndIf
EndIf
EndProcedure
;}
;-
; Open, save fonctions
Procedure LoadDessin()
File$ = OpenFileRequester("Charger l'image...", "", "JPEG Images|*.jpg|All Files|*.*", 0)
If File$
If LoadImage(#IMAGE_LoadSaveDessin, File$)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
DrawImage(ImageID(#IMAGE_LoadSaveDessin), 0, 0)
StopDrawing()
EndIf
FreeImage(#IMAGE_LoadSaveDessin)
MessageRequester(#TitleMain,"Cette image sera préservée des modifications éventuelles"+Chr(10)+"Après modification, vous pourrez l'enregistrer à tout moment") ;sinon bug quand recharge une image après utilisation des outils...
Else
MessageRequester(#TitleMain, "Impossible de charger l'image: " + File1$)
EndIf
EndIf
EndProcedure
Procedure SaveDessin()
If NbDess<>0
File$ = SaveFileRequester("Enregistrer l'image...", File$, "JPEG Images|*.jpg|All Files|*.*", 0)
If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If CreateImage(#IMAGE_LoadSaveDessin, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSaveDessin))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
NbDess=0 : EnregDess=0
If SaveImage(#IMAGE_LoadSaveDessin, File$+".jpg", #PB_ImagePlugin_JPEG) = 0
MessageRequester(#TitleMain, "Impossible d'enregistrer l'image: " + File$)
EndIf
FreeImage(#IMAGE_LoadSaveDessin)
EndIf
EndIf
EndIf
EndProcedure
Procedure EraseDessin()
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX, Haut, $FFFFFF)
StopDrawing()
EndIf
EndProcedure
Procedure DeleteTempo()
For FichierToDelete = 1 To #NbImageTempo
NomFichier.s = cheminapp$+#ChemminImageTempo+ "\" + #NameImageTempo + FichierToDelete +".jpg"
Resultat = DeleteFile(NomFichier)
Next FichierToDelete
EndProcedure
Procedure DecaleTempo()
;supprimer le premier fichier sinon plante car existe deja
NomFichier.s = cheminapp$+#ChemminImageTempo+ "\" + #NameImageTempo + "1.jpg"
Resultat = DeleteFile(NomFichier)
;va décaler les autres de -1
For FichierToDecale = 2 To #NbImageTempo
FichierEndDecale =FichierToDecale -1
NomFichierBefore.s = cheminapp$+#ChemminImageTempo+ "\" + #NameImageTempo + FichierToDecale +".jpg"
NomFichierAfter.s = cheminapp$+#ChemminImageTempo+ "\" + #NameImageTempo + FichierEndDecale +".jpg"
Resultat = RenameFile(NomFichierBefore, NomFichierAfter)
If resultat=0
MessageRequester("Erreur!", "Problème dans le décalage des fichiers temporaires"+Chr(10)+"L'application va se fermer, mais vous pouvez enregistrer l'image en cours")
SaveDessin()
End
EndIf
Next FichierToDecale
EndProcedure
Procedure LoadTempo()
If LoadImage(#IMAGE_LoadSaveTempo, #ChemminImageTempo+ "/" + #NameImageTempo+ImageEnCours+".jpg")
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
DrawImage(ImageID(#IMAGE_LoadSaveTempo), 0, 0)
StopDrawing()
EndIf
FreeImage(#IMAGE_LoadSaveTempo)
Else
MessageRequester(#TitleMain, "Impossible de charger l'image temporaire " + "File_"+ImageEnCours)
EndIf
EndProcedure
Procedure SaveTempo()
If NbDess<>0
If CreateImage(#IMAGE_LoadSaveTempo, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSaveTempo))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
If SaveImage(#IMAGE_LoadSaveTempo, #ChemminImageTempo+ "/" + #NameImageTempo+ImageEnCours+".jpg", #PB_ImagePlugin_JPEG) = 0
MessageRequester(#TitleMain, "Impossible d'enregistrer l'image temporaire " + "File_"+ImageEnCours)
End
EndIf
FreeImage(#IMAGE_LoadSaveTempo)
EndIf
EndIf
EndProcedure
;-
; Draw the mouse action result depending on the currently selected mode and event type
Procedure DrawAction(x, y, EventType)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Select CurrentMode
Case #GADGET_Brush0
DrawingMode(0)
If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
If obj1dflt=11:obj1taille=#Taille11:EndIf
If obj1dflt=12:obj1taille=#Taille12:EndIf
If obj1dflt=13:obj1taille=#Taille13:EndIf
If obj1dflt=14:obj1taille=#Taille14:EndIf
If obj1dflt=15:obj1taille=#Taille15:EndIf
Circle(x, y, obj1taille, CurrentColor)
EndIf
Case #GADGET_Line0
DrawImage(ImageID(#IMAGE_Content), 0, 0)
DrawingMode(0)
If obj2dflt=21
LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor)
EndIf
If obj2dflt=22
For nbligne=0 To 1:LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor):Next nbligne
EndIf
If obj2dflt=23
For nbligne=0 To 3
LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX+nbligne, StartY, x+nbligne, y, CurrentColor)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX, StartY+nbligne, x+nbligne, y, CurrentColor)
LineXY(StartX+nbligne, StartY, x, y+nbligne, CurrentColor)
Next nbligne
EndIf
If obj2dflt=24
For nbligne=0 To 5
LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX+nbligne, StartY, x+nbligne, y, CurrentColor)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX, StartY+nbligne, x+nbligne, y, CurrentColor)
LineXY(StartX+nbligne, StartY, x, y+nbligne, CurrentColor)
Next nbligne
EndIf
If obj2dflt=25
For nbligne=0 To 7
LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX+nbligne, StartY, x+nbligne, y, CurrentColor)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor)
LineXY(StartX, StartY+nbligne, x+nbligne, y, CurrentColor)
LineXY(StartX+nbligne, StartY, x, y+nbligne, CurrentColor)
Next nbligne
EndIf
Case #GADGET_Objet0
DrawImage(ImageID(#IMAGE_Content), 0, 0)
DrawingMode(ModeActuel)
If obj3dflt=31 Or obj3dflt=35 ;########carré1 & 2
If x > StartX And y < StartY:Box(StartX, StartY,-StartX+x,StartX-x,CurrentColor): EndIf ;HautDroit
If x > StartX And y > StartY:Box(StartX, StartY, y-StartY, y-StartY, CurrentColor): EndIf ;BasDroit
If x < StartX And y< StartY :Box(StartX, StartY, x-StartX, x-StartX, CurrentColor): EndIf ;HautGauche
If x < StartX And y> StartY :Box(StartX, StartY,-StartX+x,StartX-x,CurrentColor): EndIf ;BasGauche
EndIf
If obj3dflt=32 Or obj3dflt=36 ;#######rectangle1 & 2
Box(StartX, StartY, x-StartX, y-StartY, CurrentColor)
EndIf
If obj3dflt=33 Or obj3dflt=37 ;########rond1 & 2
If x > StartX
rx = x - StartX:Ellipse(StartX, StartY, rx, rx, CurrentColor)
Else
rx = StartX - x:Ellipse(StartX, StartY, rx, rx, CurrentColor)
EndIf
EndIf
If obj3dflt=34 Or obj3dflt=38 ;########ellipse1 & 2
If x > StartX
rx = x - StartX
Else
rx = StartX - x
EndIf
If y > StartY
ry = y - StartY
Else
ry = StartY - y
EndIf
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Modifiers) & #PB_Canvas_Control
ry = rx
EndIf
Ellipse(StartX, StartY, rx, ry, CurrentColor)
EndIf
Case #GADGET_Fill
If EventType = #PB_EventType_LeftButtonDown
FillArea(x, y, -1, CurrentColor)
EndIf
Case #GADGET_Txt
If EventType = #PB_EventType_LeftButtonDown
DrawingMode(1)
text.s=InputRequester(#TitleMain,"Saisissez votre texte:","")
DrawingFont(FontID(TailleTxt))
DrawText(StartX,StartY, text, CurrentColor)
EndIf
EndSelect
StopDrawing()
EndIf
EndProcedure
;}
;{ Initialisation
; Liste les bureaux
If ExamineDesktops()
Larg = DesktopWidth(0) ; Largeur actuelle
Haut = DesktopHeight(0) ; Hauteur actuelle
Coul = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX = Width/2
CentreY = Height/2
EndIf
; POlice d'écritures
For fontes = 0 To 20
LoadFont(fontes, "Arial", fontes + 5 *(fontes+1))
Next fontes
If UseJPEGImageDecoder() : EndIf
If UseJPEGImageEncoder() : EndIf
;}
;{ Les images
;###points
CreateBtn(11, #Taille11)
CreateBtn(12, #Taille12)
CreateBtn(13, #Taille13)
CreateBtn(14, #Taille14)
CreateBtn(15, #Taille15)
;###traits
CreateLine(21, 0)
CreateLine(22, 1)
CreateLine(23, 3)
CreateLine(24, 5)
CreateLine(25, 7)
;###formes1 / plein
CreateForm(31, #PB_2DDrawing_Default,2.5)
CreateForm(32, #PB_2DDrawing_Default,1.5)
CreateForm(33, #PB_2DDrawing_Default,0, 1)
CreateForm(34, #PB_2DDrawing_Default,0, 2)
;###formes2 / contour
CreateForm(35, #PB_2DDrawing_Outlined,2.5)
CreateForm(36, #PB_2DDrawing_Outlined,1.5)
CreateForm(37, #PB_2DDrawing_Outlined,0, 1)
CreateForm(38, #PB_2DDrawing_Outlined,0, 2)
; Texte
CreateForm(41, #PB_2DDrawing_Transparent, 0, 3)
; autres images
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content, Larg+TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24)
;}
DeleteTempo()
;{ ouverture de la fenêtre
Flag = #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered
If OpenWindow(#Fenetre_Principale, 0, 0, Larg+TailleButtonX-#PasButton*10, #PmMenu+Haut, #Title, Flag)
;{ ToolBar
CreateToolBar(#BarreMenu, WindowID(#Fenetre_Principale))
ToolBarStandardButton(#GADGET_Clear, #PB_ToolBarIcon_New)
ToolBarStandardButton(#GADGET_Load, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#GADGET_Save, #PB_ToolBarIcon_Save)
ToolBarSeparator()
ToolBarStandardButton(#GADGET_Undo, #PB_ToolBarIcon_Undo) ;annuler
ToolBarStandardButton(#GADGET_Redo, #PB_ToolBarIcon_Redo) ; retablir
ToolBarSeparator()
;}
;{ Les gadgets
CanvasGadget(#GADGET_Canvas,TailleButtonX+#PasButton,#Pmmenu+0,#Pmmenu+Larg-TailleButtonX,Haut-#Pmmenu, #PB_Canvas_ClipMouse)
TextGadget(#GADGET_PosX, 2, #Pmmenu+0, TailleButtonX, TailleButtonY/2, "PosX") ;positionX
TextGadget(#GADGET_PosY, 2, #Pmmenu+TailleButtonY/2, TailleButtonX, TailleButtonY/2, "PosY") ;positionY
ButtonImageGadget(#GADGET_Color, 2, #Pmmenu+TailleButtonY, TailleButtonX, TailleButtonY, ImageID(#IMAGE_Color))
GadgetToolTip(#GADGET_Color, #ChxCol)
ButtonImageGadget(#GADGET_Brush0, 2, #Pmmenu+TailleButtonY*2, TailleButtonX, TailleButtonY, ImageID(obj1dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Brush0,#Outil1)
ButtonImageGadget(#GADGET_Line0, 2, #Pmmenu+TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(obj2dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Line0,#Outil2)
ButtonImageGadget(#GADGET_Objet0, 2, #Pmmenu+TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(obj3dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Objet0, #Outil3)
ButtonGadget(#GADGET_Fill, 2, #Pmmenu+TailleButtonY*5, TailleButtonX, TailleButtonY, "Remplir", #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Txt, 2, #Pmmenu+TailleButtonY*6, TailleButtonX, TailleButtonY, ImageID(41), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Txt, #Outil41)
SpinGadget(#GADGET_TailleTxt, 2, #Pmmenu+TailleButtonY*7, TailleButtonX, TailleButtonY, 1, 20 , #PB_Spin_ReadOnly) ;taille texte
SetGadgetState (#GADGET_TailleTxt, #GADGET_TTxt) : SetGadgetText(#GADGET_TailleTxt, Str(#GADGET_TTxt)) ; définit la valeur initiale
GadgetToolTip(#GADGET_TailleTxt, #Outil42)
TailleTxt = GetGadgetState(#GADGET_TailleTxt)
SetGadgetState(#ChxButtonDflt, 1)
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
;}
Else
End
EndIf
;}
;{ Boucle évenementielle
Repeat
text.s= Str(ImageEnCours)+" / "+Str(NbDess)+" . Enreg "+Str(EnregDess)
;Debug text
Repeat
;- 00 - Capture des évenements utiles à cette application
Event = WindowEvent()
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
;- 01 - Evenement MENU
;{ Les menus
Case #PB_Event_Menu
Select MEvent
Case #GADGET_Clear
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNoCancel) ; o=6 / n=7 / cancel=2
EndIf
If Resultat=6
SaveDessin()
EndIf
If Resultat<>2
EraseDessin()
NbDess=0
ImageEnCours=0
DeleteTempo()
EndIf
Case #GADGET_Load
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNoCancel) ; o=6 / n=7 / cancel=2
EndIf
If Resultat=6
SaveDessin()
EndIf
If Resultat<>2 Or NbDess = 0
EraseDessin()
LoadDessin()
NbDess=0
ImageEnCours =0
DeleteTempo()
EndIf
Case #GADGET_Save
SaveDessin()
NbDess=0
EnregDess=0
ImageEnCours=0
DeleteTempo()
Case #GADGET_Undo
ImageEnCours-1
If ImageEnCours>0
EraseDessin()
LoadTempo()
Else
ImageEnCours=1
EndIf
Case #GADGET_Redo
If ImageEnCours < NbDess
ImageEnCours+1
If ImageEnCours>#NbImageTempo
ImageEnCours=#NbImageTempo
Else
EraseDessin()
LoadTempo()
EndIf
EndIf
EndSelect;}
;{ Les gadgets
Case #PB_Event_Gadget
;- 02 - Evenement FEUILLE
;Affichage des coordonnées de la souris
If x<0:x=0 : EndIf
If y<0:y=0 : EndIf
SetGadgetText (#GADGET_PosX,"X: "+Str(x))
SetGadgetText (#GADGET_PosY,"Y: "+Str(y))
Select GEvent
Case #GADGET_Canvas
X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
SaveTempo() ;va enregistrer l'image 'tempo' dans le dossier temporaire
Select TEvent
Case #PB_EventType_LeftButtonDown
;
; This stores the current content of the CanvasGadget in #IMAGE_Content,
; so it can be re-drawn While the mouse moves
;
If StartDrawing(ImageOutput(#IMAGE_Content))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
EndIf
If ImageEnCours=NbDess
NbDess+1 :ImageEnCours+1
Else
ImageEnCours+1
EndIf
If ImageEnCours>#NbImageTempo
DecaleTempo()
NbDess-1 :ImageEnCours-1
EndIf
StartX = X
StartY = Y
DrawAction(X, Y, TEvent)
Case #PB_EventType_LeftButtonUp
DrawAction(X, Y, TEvent)
Case #PB_EventType_MouseMove
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
DrawAction(X, Y, TEvent)
EndIf
EndSelect
;- 03 - Evenement SANS SELECTION
Case #GADGET_Color
LastColor = CurrentColor ;met en mémoire la couleur actuelle au cas où ColorRequester fermé avec la croix
CurrentColor = ColorRequester(CurrentColor)
If CurrentColor> -1
If StartDrawing(ImageOutput(#IMAGE_Color))
Box(0,0, 35, 35, CurrentColor)
StopDrawing()
SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
EndIf
Else
CurrentColor= LastColor ;remet la couleur précédente en mémoire si fermé avec la croix
EndIf
Case #GADGET_TailleTxt
SetGadgetText(#GADGET_TailleTxt,Str(GetGadgetState(#GADGET_TailleTxt))) ;taille du texte MEMOIRE+AFFICAHGE
TailleTxt = GetGadgetState(#GADGET_TailleTxt)
;- 04 - Evenement AVEC SELECTION
Case #GADGET_Brush0, #GADGET_Line0, #GADGET_Objet0, #GADGET_Fill, #GADGET_Txt;gère la sélection de l'outil
EventGadget = EventGadget()
For Gadget = #GADGET_Brush0 To #GADGET_Fill
If Gadget = EventGadget
SetGadgetState(Gadget, 1) ;"selected" button
;=================
If Gadget=#GADGET_Txt ;select cursor
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_IBeam)
Else
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
EndIf
;===================
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
CurrentMode = GEvent
If GEvent=#GADGET_Brush0
ChxBrush()
EndIf
If GEVENT=#GADGET_Line0
ChxLine()
EndIf
If GEVENT=#GADGET_Objet0
ChxObjet()
EndIf
EndSelect ;}
;{ event closewindow
Case #PB_Event_CloseWindow
;-05 - Fermeture du programme
Select WEvent
Case #Fenetre_Principale
If ImageEnCours<>0 ;efface fichiers temporaires a la fermeture
DeleteTempo()
EndIf
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNo) ; o=6 / n=7
If Resultat=6
SaveDessin()
EndIf
EndIf
End
Default
CloseWindow(WEvent)
EndSelect
EndSelect ;}
Until event = 0
ForEver
;}
Code : Tout sélectionner
;;{ Infos
;
; ### LOGICIEL DE DESSIN pour Gaby
; ### Réalisé par david turquin
; ### 22.04.204
; ### V1.1
; ### Compilé sous PureBasic 5.22 LTS (Windows - x86)
; ### Merci a falsam, blendman pour leur aide
; ### Longue vie à PB !
;
;}
;{ Enumeration & Constantes
Enumeration ;Window
#Fenetre_Principale
#Fenetre_ChxGum ;sous fenetre Gum
#Fenetre_ChxBrush ;sous fenetre Brush
#Fenetre_ChxLine ;sous fenetre Line
#Fenetre_ChxObjet ;sous fenetre Objet
#Fenetre_ChxTexte ;sous fenetre Texte
EndEnumeration
Enumeration ;Menu
#BarreMenu
#BarreOutil
#BarreParam
#BarreAide
#BarreAPropos
EndEnumeration
Enumeration ;Images
#IMAGE_Content ; zone de dessin
#IMAGE_ColorInk ; chx couleur encre
#IMAGE_ColorFnd ; chx couleur fond
#IMAGE_LoadSaveDessin; image
#IMAGE_LoadSaveTempo ;image tempo
EndEnumeration
Enumeration ;Gadgets
#GADGET_Canvas
#GADGET_ColorInk
#GADGET_ColorFnd
;gadgets de la fenetre principale
#GADGET_Brush0 : #GADGET_Line0 : #GADGET_Objet0 : #GADGET_Gum0 :#GADGET_Texte0 :#GADGET_Fill ;!!! toujours finir par #GADGET_Fill !!! a cause du 'for/to' (Selection + Initialisation)
#GADGET_TailleTxt : #GADGET_PosX: #GADGET_PosY
#GadgetCrash ;mode special
;gadgets de la fenetre principale menu
#GADGET_Clear
#GADGET_Load
#GADGET_Save
#GADGET_Undo
#GADGET_Redo
;gadgets de des sous fenetres
#GADGET_Brush1 : #GADGET_Brush2: #GADGET_Brush3: #GADGET_Brush4: #GADGET_Brush5
#GADGET_Gum1 : #GADGET_Gum2: #GADGET_Gum3: #GADGET_Gum4: #GADGET_Gum5
#GADGET_Line1 : #GADGET_Line2 : #GADGET_Line3 : #GADGET_Line4: #GADGET_Line5
#GADGET_Ecr1 : #GADGET_Ecr2 : #GADGET_Ecr3 : #TranspTxt ; police des fonts texte...
#GADGET_Carre1 : #GADGET_Rectangle1: #GADGET_Rond1 : #GADGET_Ovale1 ; #GADGET_Triangle1
#GADGET_Carre2 : #GADGET_Rectangle2: #GADGET_Rond2 : #GADGET_Ovale2 ; #GADGET_Triangle2
EndEnumeration
;Author...
#Author ="PB"
#TitleMain ="CanvasGadget Variation"
#Title = #TitleMain +" "+ #Author
;Button & Mode
#NbButton = 20
#Pmmenu = 30
#PasButton = 5 ;espace vide entre fin bouton et fin écran
#GADGET_TTxt = 2 ;taille texte par defaut
#ChxButtonDflt =#GADGET_Brush0 ; bouton par défaut
#DeselectQuitZone = 65539 ;65539= curseur hors fenetre / 65538= clic hors fenetre ou selection hors fenetre / 65540 clic autre gadget...
#DeselectClicAutre = "513:0:0:0:-1"
;Tempo
#NameImageTempo = "Image_" ; nom des images temporaires
#ChemminImageTempo ="tempo" ;dossier des images temporaires
#NbImageTempo = 8 ; nb d'images temporaires (pour Undo/Redo)
;taille du point 1 à 5
#Taille11=1
#Taille12=2
#Taille13=4
#Taille14=6
#Taille15=8
;textes affichés
#ChxColInk = "Choix de la couleur de l'encre"
#ChxColFnd = "Choix de la couleur du fond"
#TranspTxtName ="Transparent"
#TranspTxtNamf ="Fond d'écriture transparent"
#TxtTaille = "Taille "
#Outil0 = "Gomme"
#Outil1 = "Pinceau"
#Outil2 = "Ligne"
#Outil3 = "Forme" : #Outil31 = "Carré": #Outil32 = "Rectangle": #Outil33 = "Rond": #Outil34 = "Ovale"
#Outil41 = "Texte"
#Outil42 = "Taille du texte"
#Outil5 = "Mode d'affichage"
#Mode1 = " (plein)"
#Mode2 = " (contour)"
;}
;{ Variables
Global Event, WEvent, MEvent, GEvent, TEvent
Global CurrentColor1 = $000000, CurrentColor2 = RGB(250,250,250) , CurrentMode= #ChxButtonDflt, StartX, StartY
Global NbDess=0 , EnregDess=0 , ImageEnCours = 0
Global Larg, Haut, Coul ,CentreX, CentreY, TailleButtonX.l, TailleButtonY.l
Global TailleTxt , TailleButtonX = 40, TailleButtonY= 40
Global obj0dflt = 92 , obj1dflt = 12 , obj2dflt = 21 , obj3dflt = 31 , obj5dflt = 41
Global Mode1 = #PB_2DDrawing_Default, Mode2 =#PB_2DDrawing_Outlined, Mode3 = #PB_2DDrawing_XOr, Mode4 = #PB_2DDrawing_Transparent
Global MonSTexte1.s = "Arial", MonSTexte2.s = "Courier", MonSTexte3.s = "Script"
Global ModeActuel= Mode1, ModeCrash =0, TranspaText= 1
Global MonMode1, MonMode2
Global SousFenetre = 0, PosX, PosY
Global cheminapp$=GetCurrentDirectory()
;}
;{ Les procedures
Declare ChxGum(): Declare ChxBrush(): Declare ChxLine(): Declare ChxObjet(): Declare ChxTexte()
Declare CreateBtn(id, taille): Declare CreateLine(id, nombre): Declare CreateForm(id, couleur , ModeAffich, valeur=0, TypeDeForme=0 ): Declare GetMode(): Declare GetWindowPos()
Declare LoadDessin(): Declare SaveDessin(): Declare EraseDessin()
Declare DeleteTempo(): Declare DecaleTempo(): Declare LoadTempo(): Declare SaveTempo()
Declare DrawAction(x, y, EventType)
;}
;{ Initialisation
; Liste les bureaux
If ExamineDesktops()
Larg = DesktopWidth(0) ; Largeur actuelle
Haut = DesktopHeight(0) ; Hauteur actuelle
Coul = DesktopDepth(0) ; Profondeur de couleurs actuelle
CentreX = Width/2
CentreY = Height/2
EndIf
; Police d'écritures
For fontes = 0 To 12
LoadFont(fontes, MonSTexte1, 2* (fontes + 5 *(fontes+1)))
Next fontes
For fontes = 20 To 32
LoadFont(fontes, MonSTexte2, 2* (fontes-20 + 5 *(fontes-20+1)))
Next fontes
For fontes = 40 To 52
LoadFont(fontes, MonSTexte3, 2* (fontes-40 + 5 *(fontes-40+1)))
Next fontes
If UseJPEGImageDecoder() : EndIf
If UseJPEGImageEncoder() : EndIf
; Les images
;###points
CreateBtn(11, #Taille11)
CreateBtn(12, #Taille12)
CreateBtn(13, #Taille13)
CreateBtn(14, #Taille14)
CreateBtn(15, #Taille15)
;###traits
CreateLine(21, 0)
CreateLine(22, 1)
CreateLine(23, 3)
CreateLine(24, 5)
CreateLine(25, 7)
;###formes1 / plein
CreateForm(31, 0, #PB_2DDrawing_Default,2.5)
CreateForm(32, 0, #PB_2DDrawing_Default,1.5)
CreateForm(33, 0, #PB_2DDrawing_Default,0, 1)
CreateForm(34, 0, #PB_2DDrawing_Default,0, 2)
;###formes2 / contour
CreateForm(35, 0, #PB_2DDrawing_Outlined,2.5)
CreateForm(36, 0, #PB_2DDrawing_Outlined,1.5)
CreateForm(37, 0, #PB_2DDrawing_Outlined,0, 1)
CreateForm(38, 0, #PB_2DDrawing_Outlined,0, 2)
; Texte
CreateForm(41, 0, #PB_2DDrawing_Transparent, 0, 3)
CreateForm(42, 0, #PB_2DDrawing_Transparent, 1, 3)
CreateForm(43, 0, #PB_2DDrawing_Transparent, 2, 3)
;###gomme
CreateForm(91, RGB(255,255,255), #PB_2DDrawing_Default, 6.5 , 4)
CreateForm(92, RGB(255,255,255), #PB_2DDrawing_Default, 4.0 , 4)
CreateForm(93, RGB(255,255,255), #PB_2DDrawing_Default, 3.0 , 4)
CreateForm(94, RGB(255,255,255), #PB_2DDrawing_Default, 2.0 , 4)
CreateForm(95, RGB(255,255,255), #PB_2DDrawing_Default, 1.0 , 4)
; autres images
CreateImage(#IMAGE_ColorInk, 35, 35, 24,CurrentColor1)
CreateImage(#IMAGE_ColorFnd, 35, 35, 24,CurrentColor2)
CreateImage(#IMAGE_Content, Larg+TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24)
DeleteTempo()
;}
;{ ouverture de la fenêtre
Flag= #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered ;#PB_Window_BorderLess si commande QUIT en supplement
If OpenWindow(#Fenetre_Principale, 0, 0, Larg+TailleButtonX-#PasButton*10, #PmMenu+Haut, #Title, Flag)
;{ ToolBar
CreateToolBar(#BarreMenu, WindowID(#Fenetre_Principale))
ToolBarStandardButton(#GADGET_Clear, #PB_ToolBarIcon_New) ;nouveau
ToolBarStandardButton(#GADGET_Load, #PB_ToolBarIcon_Open) ;ouvrir
ToolBarStandardButton(#GADGET_Save, #PB_ToolBarIcon_Save) ;enregistrer
ToolBarSeparator()
ToolBarStandardButton(#GADGET_Undo, #PB_ToolBarIcon_Undo) ;annuler
ToolBarStandardButton(#GADGET_Redo, #PB_ToolBarIcon_Redo) ;retablir
ToolBarSeparator()
;}
;{ Les gadgets
CanvasGadget(#GADGET_Canvas,TailleButtonX+#PasButton,#Pmmenu+0,#Pmmenu+Larg-TailleButtonX,Haut-#Pmmenu, #PB_Canvas_ClipMouse)
TextGadget(#GADGET_PosX, 2, #Pmmenu+0, TailleButtonX, TailleButtonY/2, "PosX") ;positionX
TextGadget(#GADGET_PosY, 2, #Pmmenu+TailleButtonY/2, TailleButtonX, TailleButtonY/2, "PosY") ;positionY
ButtonImageGadget(#GADGET_ColorInk, 2, #Pmmenu+TailleButtonY, TailleButtonX, TailleButtonY, ImageID(#IMAGE_ColorInk))
GadgetToolTip(#GADGET_ColorInk, #ChxColInk)
ButtonImageGadget(#GADGET_Brush0, 2, #Pmmenu+TailleButtonY*2, TailleButtonX, TailleButtonY, ImageID(obj1dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Brush0,#Outil1)
ButtonImageGadget(#GADGET_Line0, 2, #Pmmenu+TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(obj2dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Line0,#Outil2)
ButtonImageGadget(#GADGET_Objet0, 2, #Pmmenu+TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(obj3dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Objet0, #Outil3)
ButtonGadget(#GADGET_Fill, 2, #Pmmenu+TailleButtonY*5, TailleButtonX, TailleButtonY, "Remplir", #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Gum0, 2, #Pmmenu+TailleButtonY*6, TailleButtonX, TailleButtonY, ImageID(obj0dflt), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Gum0,#Outil0)
ButtonImageGadget(#GADGET_Texte0, 2, #Pmmenu+TailleButtonY*7, TailleButtonX, TailleButtonY, ImageID(41), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Texte0, #Outil41)
CheckBoxGadget(#GadgetCrash, 2, #Pmmenu+TailleButtonY*8, TailleButtonX, TailleButtonY, "Mode")
GadgetToolTip(#GadgetCrash, #Outil5)
SetGadgetState(#ChxButtonDflt, 1)
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
;}
Else
End
EndIf
;}
;{ Boucle évenementielle
Repeat
text.s= Str(ImageEnCours)+" / "+Str(NbDess)+" . Enreg "+Str(EnregDess)
; text
;Debug SousFenetre
Repeat
;- 00 - Capture des évenements utiles à cette application
Event = WindowEvent()
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
;- 01 - Evenement MENU
;{ Les menus
Case #PB_Event_Menu
Select MEvent
Case #GADGET_Clear
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNoCancel) ; o=6 / n=7 / cancel=2
EndIf
If Resultat=6
SaveDessin()
EndIf
If Resultat<>2
EraseDessin()
NbDess=0
ImageEnCours=0
DeleteTempo()
EndIf
Case #GADGET_Load
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNoCancel) ; o=6 / n=7 / cancel=2
EndIf
If Resultat=6
SaveDessin()
EndIf
If Resultat<>2 Or NbDess = 0
EraseDessin()
LoadDessin()
NbDess=0
ImageEnCours =0
DeleteTempo()
EndIf
Case #GADGET_Save
SaveDessin()
NbDess=0
EnregDess=0
ImageEnCours=0
DeleteTempo()
Case #GADGET_Undo
ImageEnCours-1
If ImageEnCours>0
EraseDessin()
LoadTempo()
Else
ImageEnCours=1
EndIf
Case #GADGET_Redo
If ImageEnCours < NbDess
ImageEnCours+1
If ImageEnCours>#NbImageTempo
ImageEnCours=#NbImageTempo
Else
EraseDessin()
LoadTempo()
EndIf
EndIf
EndSelect;}
;{ Les gadgets
Case #PB_Event_Gadget
;- 02 - Evenement FEUILLE
;Affichage des coordonnées de la souris
If x<0:x=0 : EndIf
If y<0:y=0 : EndIf
SetGadgetText (#GADGET_PosX,"X: "+Str(x))
SetGadgetText (#GADGET_PosY,"Y: "+Str(y))
;Debug SousFenetre
Select GEvent
Case #GADGET_Canvas
X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
SaveTempo() ;va enregistrer l'image 'tempo' dans le dossier temporaire
Select TEvent
Case #PB_EventType_LeftButtonDown
;
; This stores the current content of the CanvasGadget in #IMAGE_Content,
; so it can be re-drawn While the mouse moves
;
If StartDrawing(ImageOutput(#IMAGE_Content))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
EndIf
If ImageEnCours=NbDess
NbDess+1 :ImageEnCours+1
Else
ImageEnCours+1
EndIf
If ImageEnCours>#NbImageTempo
DecaleTempo()
NbDess-1 :ImageEnCours-1
EndIf
StartX = X
StartY = Y
DrawAction(X, Y, TEvent)
Case #PB_EventType_LeftButtonUp
DrawAction(X, Y, TEvent)
Case #PB_EventType_MouseMove
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
DrawAction(X, Y, TEvent)
EndIf
EndSelect
;- 03 - Evenement SANS SELECTION
Case #GADGET_ColorInk
LastColor = CurrentColor1 ;met en mémoire la couleur actuelle au cas où ColorRequester fermé avec la croix
CurrentColor1 = ColorRequester(CurrentColor1)
If CurrentColor1> -1
If StartDrawing(ImageOutput(#IMAGE_ColorInk))
Box(0,0, 35, 35, CurrentColor1)
StopDrawing()
SetGadgetAttribute(#GADGET_ColorInk, #PB_Button_Image, ImageID(#IMAGE_ColorInk))
EndIf
Else
CurrentColor1= LastColor ;remet la couleur précédente en mémoire si fermé avec la croix
EndIf
;- 04 - Evenement AVEC SELECTION
Case #GADGET_Brush0, #GADGET_Line0, #GADGET_Objet0, #GADGET_Fill, #GADGET_Gum0 , #GADGET_Texte0;gère la sélection de l'outil
EventGadget = EventGadget()
For Gadget = #GADGET_Brush0 To #GADGET_Fill
If Gadget = EventGadget
SetGadgetState(Gadget, 1) ;"selected" button
;=================
If Gadget=#GADGET_Texte0 ;select cursor
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_IBeam)
Else
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
EndIf
;===================
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
CurrentMode = GEvent
If GEvent=#GADGET_Gum0
ChxGum()
EndIf
If GEvent=#GADGET_Brush0
ChxBrush()
EndIf
If GEVENT=#GADGET_Line0
ChxLine()
EndIf
If GEVENT=#GADGET_Objet0
ChxObjet()
EndIf
If GEVENT=#GADGET_Texte0
ChxTexte()
EndIf
EndSelect ;}
;{ event closewindow
Case #PB_Event_CloseWindow
;-05 - Fermeture du programme
Select WEvent
Case #Fenetre_Principale
If ImageEnCours<>0 ;efface fichiers temporaires a la fermeture
DeleteTempo()
EndIf
If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?", #PB_MessageRequester_YesNo) ; o=6 / n=7
If Resultat=6
SaveDessin()
EndIf
EndIf
End
Default
CloseWindow(WEvent)
EndSelect
EndSelect ;}
Until event = 0
ForEver
;}
;############## LES PROCEDURES ####################################
; Draw the mouse action result depending on the currently selected mode and event type
Procedure DrawAction(x, y, EventType)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Select CurrentMode
Case #GADGET_Gum0
DrawingMode(0)
If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
If obj0dflt=91:obj0taille=#Taille11:EndIf
If obj0dflt=92:obj0taille=#Taille12:EndIf
If obj0dflt=93:obj0taille=#Taille13:EndIf
If obj0dflt=94:obj0taille=#Taille14:EndIf
If obj0dflt=95:obj0taille=#Taille15:EndIf
Box(x, y, obj0taille*4, obj0taille*4 ,RGB(255, 255, 255))
EndIf
Case #GADGET_Brush0
GetMode() ;coché/non coché mode spc
If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
If obj1dflt=11:obj1taille=#Taille11:EndIf
If obj1dflt=12:obj1taille=#Taille12:EndIf
If obj1dflt=13:obj1taille=#Taille13:EndIf
If obj1dflt=14:obj1taille=#Taille14:EndIf
If obj1dflt=15:obj1taille=#Taille15:EndIf
Circle(x, y, obj1taille, CurrentColor1)
EndIf
Case #GADGET_Line0
DrawImage(ImageID(#IMAGE_Content), 0, 0)
GetMode() ;coché/non coché mode spc
If obj2dflt=21
LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor1)
EndIf
If obj2dflt=22
For nbligne=0 To 1:LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor1):Next nbligne
EndIf
If obj2dflt=23
For nbligne=0 To 3
LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX+nbligne, StartY, x+nbligne, y, CurrentColor1)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX, StartY+nbligne, x+nbligne, y, CurrentColor1)
LineXY(StartX+nbligne, StartY, x, y+nbligne, CurrentColor1)
Next nbligne
EndIf
If obj2dflt=24
For nbligne=0 To 5
LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX+nbligne, StartY, x+nbligne, y, CurrentColor1)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX, StartY+nbligne, x+nbligne, y, CurrentColor1)
LineXY(StartX+nbligne, StartY, x, y+nbligne, CurrentColor1)
Next nbligne
EndIf
If obj2dflt=25
For nbligne=0 To 7
LineXY(StartX+nbligne, StartY+nbligne, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX+nbligne, StartY, x+nbligne, y, CurrentColor1)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX, StartY, x+nbligne, y+nbligne, CurrentColor1)
LineXY(StartX, StartY+nbligne, x+nbligne, y, CurrentColor1)
LineXY(StartX+nbligne, StartY, x, y+nbligne, CurrentColor1)
Next nbligne
EndIf
Case #GADGET_Objet0
DrawImage(ImageID(#IMAGE_Content), 0, 0)
GetMode() ;coché/non coché mode spc
If obj3dflt=31 Or obj3dflt=35 ;########carré1 & 2
If x > StartX And y < StartY:Box(StartX, StartY,-StartX+x,StartX-x,CurrentColor1): EndIf ;HautDroit
If x > StartX And y > StartY:Box(StartX, StartY, y-StartY, y-StartY, CurrentColor1): EndIf ;BasDroit
If x < StartX And y< StartY :Box(StartX, StartY, x-StartX, x-StartX, CurrentColor1): EndIf ;HautGauche
If x < StartX And y> StartY :Box(StartX, StartY,-StartX+x,StartX-x,CurrentColor1): EndIf ;BasGauche
EndIf
If obj3dflt=32 Or obj3dflt=36 ;#######rectangle1 & 2
Box(StartX, StartY, x-StartX, y-StartY, CurrentColor1)
EndIf
If obj3dflt=33 Or obj3dflt=37 ;########rond1 & 2
If x > StartX
rx = x - StartX:Ellipse(StartX, StartY, rx, rx, CurrentColor1)
Else
rx = StartX - x:Ellipse(StartX, StartY, rx, rx, CurrentColor1)
EndIf
EndIf
If obj3dflt=34 Or obj3dflt=38 ;########ellipse1 & 2
If x > StartX
rx = x - StartX
Else
rx = StartX - x
EndIf
If y > StartY
ry = y - StartY
Else
ry = StartY - y
EndIf
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Modifiers) & #PB_Canvas_Control
ry = rx
EndIf
Ellipse(StartX, StartY, rx, ry, CurrentColor1)
EndIf
Case #GADGET_Fill
If EventType = #PB_EventType_LeftButtonDown
FillArea(x, y, -1, CurrentColor1)
EndIf
Case #GADGET_Texte0
If EventType = #PB_EventType_LeftButtonDown
text.s=InputRequester(#TitleMain,"Saisissez votre texte:","")
DrawingMode(TranspaText)
GetMode() ;coché/non coché mode spc
If obj5dflt=41 : DrawingFont(FontID(TailleTxt -1)) :EndIf
If obj5dflt=42 : DrawingFont(FontID(TailleTxt+20-1)) :EndIf
If obj5dflt=43 : DrawingFont(FontID(TailleTxt+40-1)) :EndIf
If TranspaText=1 : DrawText(StartX,StartY, text, CurrentColor1):EndIf
If TranspaText=0 : DrawText(StartX,StartY, text, CurrentColor1, CurrentColor2):EndIf
EndIf
EndSelect
StopDrawing()
EndIf
EndProcedure
;-
Procedure ChxGum()
GetWindowPos() ;recup position fenetre principale
nb_button=5
If OpenWindow(#Fenetre_ChxGum, PosX , PosY +#Pmmenu+TailleButtonY*6, TailleButtonX*nb_button, TailleButtonY, #Outil0, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Gum1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(91), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Gum2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(92), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Gum3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(93), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Gum4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(94), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Gum5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(95), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Gum1, #TxtTaille+"1")
GadgetToolTip(#GADGET_Gum2, #TxtTaille+"2")
GadgetToolTip(#GADGET_Gum3, #TxtTaille+"3")
GadgetToolTip(#GADGET_Gum4, #TxtTaille+"4")
GadgetToolTip(#GADGET_Gum5, #TxtTaille+"5")
If obj0dflt=91: SetGadgetState(#GADGET_Gum1, 1) :EndIf
If obj0dflt=92: SetGadgetState(#GADGET_Gum2, 1) :EndIf
If obj0dflt=93: SetGadgetState(#GADGET_Gum3, 1) :EndIf
If obj0dflt=94: SetGadgetState(#GADGET_Gum4, 1) :EndIf
If obj0dflt=95: SetGadgetState(#GADGET_Gum5, 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #GADGET_Gum1
obj0dflt=91 : SetGadgetAttribute(#GADGET_Gum0, #PB_Button_Image, ImageID (obj0dflt)) : quit = 1
Case #GADGET_Gum2
obj0dflt=92 : SetGadgetAttribute(#GADGET_Gum0, #PB_Button_Image, ImageID (obj0dflt)) : quit = 1
Case #GADGET_Gum3
obj0dflt=93 : SetGadgetAttribute(#GADGET_Gum0, #PB_Button_Image, ImageID (obj0dflt)) : quit = 1
Case #GADGET_Gum4
obj0dflt=94 : SetGadgetAttribute(#GADGET_Gum0, #PB_Button_Image, ImageID (obj0dflt)) : quit = 1
Case #GADGET_Gum5
obj0dflt=95 : SetGadgetAttribute(#GADGET_Gum0, #PB_Button_Image, ImageID (obj0dflt)) : quit = 1
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Gum1 To #GADGET_Gum5
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
; VerifAction.s = Str(Event)+":"+Str(WEvent)+":"+Str(MEvent)+":"+Str(GEvent)+":"+Str(TEvent)
; If VerifAction = #DeselectClicAutre: Quit=1:EndIf /// bug sur Gum1
Until Event = #PB_Event_CloseWindow Or Quit = 1 Or TEvent=#DeselectQuitZone
EndIf
SousFenetre=0
CloseWindow(#Fenetre_ChxGum)
EndProcedure
Procedure ChxBrush()
GetWindowPos() ;recup position fenetre principale
nb_button=5
MonMode1 = Mode1
If OpenWindow(#Fenetre_ChxBrush, PosX , PosY +#Pmmenu+TailleButtonY*2, TailleButtonX*nb_button, TailleButtonY, #Outil1, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Brush1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(11), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(12), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(13), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(14), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Brush5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(15), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Brush1, #TxtTaille+"1")
GadgetToolTip(#GADGET_Brush2, #TxtTaille+"2")
GadgetToolTip(#GADGET_Brush3, #TxtTaille+"3")
GadgetToolTip(#GADGET_Brush4, #TxtTaille+"4")
GadgetToolTip(#GADGET_Brush5, #TxtTaille+"5")
If obj1dflt=11: SetGadgetState(#GADGET_Brush1, 1) :EndIf
If obj1dflt=12: SetGadgetState(#GADGET_Brush2, 1) :EndIf
If obj1dflt=13: SetGadgetState(#GADGET_Brush3, 1) :EndIf
If obj1dflt=14: SetGadgetState(#GADGET_Brush4, 1) :EndIf
If obj1dflt=15: SetGadgetState(#GADGET_Brush5, 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #GADGET_Brush1
obj1dflt=11 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush2
obj1dflt=12 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush3
obj1dflt=13 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush4
obj1dflt=14 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
Case #GADGET_Brush5
obj1dflt=15 : SetGadgetAttribute(#GADGET_Brush0, #PB_Button_Image, ImageID (obj1dflt)) : quit = 1
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Brush1 To #GADGET_Brush5
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
; VerifAction.s = Str(Event)+":"+Str(WEvent)+":"+Str(MEvent)+":"+Str(GEvent)+":"+Str(TEvent)
; If VerifAction = #DeselectClicAutre: Quit=1:EndIf
Until Event = #PB_Event_CloseWindow Or Quit = 1 Or TEvent=#DeselectQuitZone
EndIf
SousFenetre=0
CloseWindow(#Fenetre_ChxBrush)
EndProcedure
Procedure ChxLine()
GetWindowPos() ;recup position fenetre principale
nb_button=5
MonMode1 = Mode1
If OpenWindow(#Fenetre_ChxLine, PosX , PosY +#Pmmenu+TailleButtonY*3, TailleButtonX*nb_button, TailleButtonY, #Outil2, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
ButtonImageGadget(#GADGET_Line1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(21), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(22), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(23), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line4, TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(24), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Line5, TailleButtonX*4, 0, TailleButtonX, TailleButtonY, ImageID(25), #PB_Button_Toggle)
GadgetToolTip(#GADGET_Line1, #TxtTaille+"1")
GadgetToolTip(#GADGET_Line2, #TxtTaille+"2")
GadgetToolTip(#GADGET_Line3, #TxtTaille+"3")
GadgetToolTip(#GADGET_Line4, #TxtTaille+"4")
GadgetToolTip(#GADGET_Line5, #TxtTaille+"5")
If obj2dflt=21: SetGadgetState(#GADGET_Line1, 1) :EndIf
If obj2dflt=22: SetGadgetState(#GADGET_Line2, 1) :EndIf
If obj2dflt=23: SetGadgetState(#GADGET_Line3, 1) :EndIf
If obj2dflt=24: SetGadgetState(#GADGET_Line4, 1) :EndIf
If obj2dflt=25: SetGadgetState(#GADGET_Line5, 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #GADGET_Line1
obj2dflt=21 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
Case #GADGET_Line2
obj2dflt=22 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
Case #GADGET_Line3
obj2dflt=23 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
Case #GADGET_Line4
obj2dflt=24 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
Case #GADGET_Line5
obj2dflt=25 : SetGadgetAttribute(#GADGET_Line0, #PB_Button_Image, ImageID (obj2dflt)) : quit = 1
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Line1 To #GADGET_Line5
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
; VerifAction.s = Str(Event)+":"+Str(WEvent)+":"+Str(MEvent)+":"+Str(GEvent)+":"+Str(TEvent)
; If VerifAction = #DeselectClicAutre: Quit=1:EndIf
Until Event = #PB_Event_CloseWindow Or quit = 1 Or TEvent=#DeselectQuitZone
EndIf
SousFenetre=0
CloseWindow(#Fenetre_ChxLine)
EndProcedure
Procedure ChxObjet()
GetWindowPos() ;recup position fenetre principale
nb_button=4 ;par ligne
If OpenWindow(#Fenetre_ChxObjet, PosX , PosY +#Pmmenu+TailleButtonY*4, TailleButtonX*nb_button, TailleButtonY*2,#Outil3, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
;position button
ButtonImageGadget(#GADGET_Carre1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(31), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Rectangle1, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(32), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Rond1, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(33), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Ovale1 , TailleButtonX*3, 0, TailleButtonX, TailleButtonY, ImageID(34), #PB_Button_Toggle)
;
ButtonImageGadget(#GADGET_Carre2, 0 , TailleButtonY, TailleButtonX, TailleButtonY, ImageID(35), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Rectangle2, TailleButtonY, TailleButtonY, TailleButtonX, TailleButtonY, ImageID(36), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Rond2, TailleButtonX*2, TailleButtonY, TailleButtonX, TailleButtonY, ImageID(37), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Ovale2 , TailleButtonX*3, TailleButtonY, TailleButtonX, TailleButtonY, ImageID(38), #PB_Button_Toggle)
;name button
GadgetToolTip(#GADGET_Carre1, #Outil31+#Mode1)
GadgetToolTip(#GADGET_Rectangle1, #Outil32+#Mode1)
GadgetToolTip(#GADGET_Rond1, #Outil33+#Mode1)
GadgetToolTip(#GADGET_Ovale1, #Outil34+#Mode1)
;
GadgetToolTip(#GADGET_Carre2, #Outil31+#Mode2)
GadgetToolTip(#GADGET_Rectangle2, #Outil32+#Mode2)
GadgetToolTip(#GADGET_Rond2, #Outil33+#Mode2)
GadgetToolTip(#GADGET_Ovale2, #Outil34+#Mode2)
;image button
If obj3dflt=31: SetGadgetState(#GADGET_Carre1 , 1) :EndIf
If obj3dflt=32: SetGadgetState(#GADGET_Rectangle1 , 1) :EndIf
If obj3dflt=33: SetGadgetState(#GADGET_Rond1 , 1) :EndIf
If obj3dflt=34: SetGadgetState(#GADGET_Ovale1 , 1) :EndIf
;
If obj3dflt=35: SetGadgetState(#GADGET_Carre2 , 1) :EndIf
If obj3dflt=36: SetGadgetState(#GADGET_Rectangle2 , 1) :EndIf
If obj3dflt=37: SetGadgetState(#GADGET_Rond2 , 1) :EndIf
If obj3dflt=38: SetGadgetState(#GADGET_Ovale2 , 1) :EndIf
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
;ligne1
Case #GADGET_Carre1
obj3dflt=31 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : MonMode1 = Mode1: quit = 1 ;#Mode1 = plein
Case #GADGET_Rectangle1
obj3dflt=32 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : MonMode1 = Mode1: quit = 1
Case #GADGET_Rond1
obj3dflt=33 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : MonMode1 = Mode1: quit = 1
Case #GADGET_Ovale1
obj3dflt=34 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : MonMode1 = Mode1: quit = 1
;ligne2
Case #GADGET_Carre2
obj3dflt=35 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : MonMode1 = Mode2: quit = 1 ;#Mode2 = contours
Case #GADGET_Rectangle2
obj3dflt=36 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : MonMode1 = Mode2: quit = 1
Case #GADGET_Rond2
obj3dflt=37 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : MonMode1 = Mode2: quit = 1
Case #GADGET_Ovale2
obj3dflt=38 : SetGadgetAttribute(#GADGET_Objet0, #PB_Button_Image, ImageID (obj3dflt)) : MonMode1 = Mode2: quit = 1
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Carre1 To #GADGET_Ovale1
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
; VerifAction.s = Str(Event)+":"+Str(WEvent)+":"+Str(MEvent)+":"+Str(GEvent)+":"+Str(TEvent)
; If VerifAction = #DeselectClicAutre: Quit=1:EndIf
Until Event = #PB_Event_CloseWindow Or quit = 1 Or TEvent=#DeselectQuitZone
EndIf
SousFenetre=0
CloseWindow(#Fenetre_ChxObjet)
EndProcedure
Procedure ChxTexte()
GetWindowPos() ;recup position fenetre principale
nb_button=7 ;par ligne
If OpenWindow(#Fenetre_ChxTexte, PosX , PosY +#Pmmenu+TailleButtonY*7, TailleButtonX*nb_button, TailleButtonY*1,#Outil41, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
;Ecr1, Ecr2, Ecr3
ButtonImageGadget(#GADGET_Ecr1, 0 , 0, TailleButtonX, TailleButtonY, ImageID(41), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Ecr2, TailleButtonY, 0, TailleButtonX, TailleButtonY, ImageID(42), #PB_Button_Toggle)
ButtonImageGadget(#GADGET_Ecr3, TailleButtonX*2, 0, TailleButtonX, TailleButtonY, ImageID(43), #PB_Button_Toggle)
;taille ecr
SpinGadget(#GADGET_TailleTxt, TailleButtonX*3 , 0, TailleButtonX, TailleButtonY, 1, 13, #PB_Spin_ReadOnly) ;taille texte
If TailleTxt=0 ;si TailleTxt non définie (première utilisation=0 ; prend la valeur par defaut #GADGET_TTxt)
SetGadgetState(#GADGET_TailleTxt, #GADGET_TTxt) : SetGadgetText(#GADGET_TailleTxt, Str(#GADGET_TTxt)) ; définit la valeur initiale
Else
SetGadgetState(#GADGET_TailleTxt, TailleTxt) : SetGadgetText(#GADGET_TailleTxt, Str(TailleTxt)) ; définit la valeur initiale
EndIf
GadgetToolTip(#GADGET_TailleTxt, #Outil42)
TailleTxt = GetGadgetState(#GADGET_TailleTxt)
;ColorFnd (si pas #TranspTxt)
ButtonImageGadget(#GADGET_ColorFnd, TailleButtonX*4 , 0, TailleButtonX, TailleButtonY, ImageID(#IMAGE_ColorFnd))
GadgetToolTip(#GADGET_ColorFnd, #ChxColFnd)
;Transp Fnd
CheckBoxGadget(#TranspTxt, TailleButtonX*5 , 0, TailleButtonX*2, TailleButtonY, #TranspTxtName)
GadgetToolTip(#TranspTxt, #TranspTxtNamf)
SetGadgetState(#TranspTxt, TranspaText)
;name button
GadgetToolTip(#GADGET_Ecr1, MonSTexte1)
GadgetToolTip(#GADGET_Ecr2, MonSTexte2)
GadgetToolTip(#GADGET_Ecr3, MonSTexte3)
;
;image button
If obj5dflt=41: SetGadgetState(#GADGET_Ecr1 , 1) :EndIf
If obj5dflt=42: SetGadgetState(#GADGET_Ecr2 , 1) :EndIf
If obj5dflt=43: SetGadgetState(#GADGET_Ecr3 , 1) :EndIf
;
Repeat
;-Boucle évenementielle
;-Capture des évenements
Event = WaitWindowEvent(10)
WEvent = EventWindow() ;Fenetre qui a provoqué l'évement
MEvent = EventMenu() ;Menu qui a provoqué un évenement *****
GEvent = EventGadget() ;Gadget qui a provoqué un évenement
TEvent = EventType() ;Type qui génére un évenement
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #GADGET_Ecr1
obj5dflt=41 : SetGadgetAttribute(#GADGET_Texte0, #PB_Button_Image, ImageID (obj5dflt))
Case #GADGET_Ecr2
obj5dflt=42 : SetGadgetAttribute(#GADGET_Texte0, #PB_Button_Image, ImageID (obj5dflt))
Case #GADGET_Ecr3
obj5dflt=43 : SetGadgetAttribute(#GADGET_Texte0, #PB_Button_Image, ImageID (obj5dflt))
Case #GADGET_TailleTxt
SetGadgetText(#GADGET_TailleTxt,Str(GetGadgetState(#GADGET_TailleTxt))) ;affich taille
TailleTxt = GetGadgetState(#GADGET_TailleTxt) ;recup taille
Case #GADGET_ColorFnd
LastColor = CurrentColor2 ;met en mémoire la couleur actuelle au cas où ColorRequester fermé avec la croix
LastTranspaText = GetGadgetState(#TranspTxt); ;met en mémoire coché/non coché au cas où ColorRequester fermé avec la croix
CurrentColor2 = ColorRequester(CurrentColor2)
If CurrentColor2> -1
If StartDrawing(ImageOutput(#IMAGE_ColorFnd))
Box(0,0, 35, 35, CurrentColor2)
StopDrawing()
SetGadgetAttribute(#GADGET_ColorFnd, #PB_Button_Image, ImageID(#IMAGE_ColorFnd))
TranspaText=0 :SetGadgetState(#TranspTxt, TranspaText)
EndIf
Else
CurrentColor2= LastColor ;remet la couleur précédente en mémoire si fermé avec la croix
SetGadgetState(#TranspTxt, LastTranspaText) ;remet etat transp précédent
EndIf
Case #TranspTxt
TranspaText = GetGadgetState(#TranspTxt)
EndSelect
;- Gestion sélection
For Gadget = #GADGET_Ecr1 To #GADGET_Ecr3
If Gadget = GEvent
SetGadgetState(Gadget, 1)
Else
SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
EndIf
Next
EndSelect
; VerifAction.s = Str(Event)+":"+Str(WEvent)+":"+Str(MEvent)+":"+Str(GEvent)+":"+Str(TEvent)
; If VerifAction = #DeselectClicAutre: Quit=1:EndIf
Until Event = #PB_Event_CloseWindow Or quit = 1 Or TEvent=#DeselectQuitZone
EndIf
SousFenetre=0
CloseWindow(#Fenetre_ChxTexte)
EndProcedure
;-
;{ Creation des interfaces
; Création des images pour les outils (brush - points)
Procedure CreateBtn(id, taille)
If CreateImage(id, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Circle(TailleButtonX/2, TailleButtonY/2, taille, 0)
StopDrawing()
EndIf
EndIf
EndProcedure
; Creation des images pour les lignes
Procedure CreateLine(id, nombre)
If CreateImage(id, TailleButtonX, TailleButtonY )
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
For i = 0 To nombre
LineXY(#PasButton*2, TailleButtonY/2 + i, TailleButtonX - #PasButton*2, TailleButtonY/2 + i, 0)
Next i
StopDrawing()
EndIf
EndIf
EndProcedure
; Forme caré...
Procedure CreateForm(id, couleur , ModeAffich, valeur=0, TypeDeForme=0 )
; typeDeForme
; 0 : boxbox & box (carré & rectangle)
; 1 : circlecircle (rond)
; 2 : circle (ellipse)
; 3 : texte
If CreateImage(id, TailleButtonX, TailleButtonY ) ;bouton
If StartDrawing(ImageOutput(id))
Box(0,0,50,50, RGB(221,221,221)) ; fond bouton gris
FrontColor(RGB(0,0,0)) ; noir
Select TypeDeForme
Case 0 :
DrawingMode(ModeAffich): Box((TailleButtonX - TailleButtonX/valeur)/2,(TailleButtonY - TailleButtonY/3)/2, TailleButtonX/valeur, TailleButtonY/3, couleur)
Case 1 :
DrawingMode(ModeAffich): Ellipse((TailleButtonX - TailleButtonX/16 +1)/2,(TailleButtonY - TailleButtonY/16 + 1)/2, 10, 10, couleur)
Case 2 :
DrawingMode(ModeAffich): Ellipse((TailleButtonX-TailleButtonX/10+4)/2,(TailleButtonY-TailleButtonY/17+1)/2, 15, 10, couleur)
Case 3 :
If Valeur = 0 : MonFont = 00: EndIf
If Valeur = 1 : MonFont = 20: EndIf
If Valeur = 2 : MonFont = 40: EndIf
DrawingFont(FontID(MonFont))
DrawingMode(ModeAffich):DrawText(8,15, "ABC", couleur)
Case 4 :
DrawingMode(ModeAffich): Box((TailleButtonX - TailleButtonX/valeur)/2,(TailleButtonX - TailleButtonX/valeur)/2, TailleButtonX/valeur, TailleButtonX/valeur, couleur)
EndSelect
StopDrawing()
EndIf
EndIf
EndProcedure
;}
Procedure GetMode()
ModeCrash= GetGadgetState(#GadgetCrash)
If TranspaText = 1 ;voir si transp txt ou normal
MonMode1 = Mode4
Else
MonMode1 = Mode1
EndIf
If ModeCrash=1 ;voir si mode Xor
MonMode2 = Mode3
DrawingMode (MonMode1 + Val(" | ") + MonMode2)
Else
DrawingMode (MonMode1)
EndIf
EndProcedure
Procedure GetWindowPos()
PosX = WindowX(#Fenetre_Principale)
PosY = WindowY(#Fenetre_Principale)
EndProcedure
;-
;{ fonctions Dessin
Procedure LoadDessin()
File$ = OpenFileRequester("Charger l'image...", "", "JPEG Images|*.jpg|All Files|*.*", 0)
If File$
If LoadImage(#IMAGE_LoadSaveDessin, File$)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
DrawImage(ImageID(#IMAGE_LoadSaveDessin), 0, 0)
StopDrawing()
EndIf
FreeImage(#IMAGE_LoadSaveDessin)
MessageRequester(#TitleMain,"Cette image sera préservée des modifications éventuelles"+Chr(10)+"Après modification, vous pourrez l'enregistrer à tout moment") ;sinon bug quand recharge une image après utilisation des outils...
Else
MessageRequester(#TitleMain, "Impossible de charger l'image: " + File1$)
EndIf
EndIf
EndProcedure
Procedure SaveDessin()
If NbDess<>0
File$ = SaveFileRequester("Enregistrer l'image...", File$, "JPEG Images|*.jpg|All Files|*.*", 0)
If File$ And (FileSize(File$) = -1 Or MessageRequester("CanvasGadget", "Overwrite this file? " + File$, #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes)
If CreateImage(#IMAGE_LoadSaveDessin, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSaveDessin))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
NbDess=0 : EnregDess=0
If SaveImage(#IMAGE_LoadSaveDessin, File$+".jpg", #PB_ImagePlugin_JPEG) = 0
MessageRequester(#TitleMain, "Impossible d'enregistrer l'image: " + File$)
EndIf
FreeImage(#IMAGE_LoadSaveDessin)
EndIf
EndIf
EndIf
EndProcedure
Procedure EraseDessin()
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX, Haut, $FFFFFF)
StopDrawing()
EndIf
EndProcedure
;}
;{ fonctions TEMPO
Procedure DeleteTempo()
For FichierToDelete = 1 To #NbImageTempo
NomFichier.s = cheminapp$+#ChemminImageTempo+ "\" + #NameImageTempo + FichierToDelete +".jpg"
Resultat = DeleteFile(NomFichier)
Next FichierToDelete
EndProcedure
Procedure DecaleTempo()
;supprimer le premier fichier sinon plante car existe deja
NomFichier.s = cheminapp$+#ChemminImageTempo+ "\" + #NameImageTempo + "1.jpg"
Resultat = DeleteFile(NomFichier)
;va décaler les autres de -1
For FichierToDecale = 2 To #NbImageTempo
FichierEndDecale =FichierToDecale -1
NomFichierBefore.s = cheminapp$+#ChemminImageTempo+ "\" + #NameImageTempo + FichierToDecale +".jpg"
NomFichierAfter.s = cheminapp$+#ChemminImageTempo+ "\" + #NameImageTempo + FichierEndDecale +".jpg"
Resultat = RenameFile(NomFichierBefore, NomFichierAfter)
If resultat=0
MessageRequester("Erreur!", "Problème dans le décalage des fichiers temporaires"+Chr(10)+"L'application va se fermer, mais vous pouvez enregistrer l'image en cours")
SaveDessin()
End
EndIf
Next FichierToDecale
EndProcedure
Procedure LoadTempo()
If LoadImage(#IMAGE_LoadSaveTempo, #ChemminImageTempo+ "/" + #NameImageTempo+ImageEnCours+".jpg")
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
DrawImage(ImageID(#IMAGE_LoadSaveTempo), 0, 0)
StopDrawing()
EndIf
FreeImage(#IMAGE_LoadSaveTempo)
Else
MessageRequester(#TitleMain, "Impossible de charger l'image temporaire " + "File_"+ImageEnCours)
EndIf
EndProcedure
Procedure SaveTempo()
If NbDess<>0
If CreateImage(#IMAGE_LoadSaveTempo, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24) And StartDrawing(ImageOutput(#IMAGE_LoadSaveTempo))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
If SaveImage(#IMAGE_LoadSaveTempo, #ChemminImageTempo+ "/" + #NameImageTempo+ImageEnCours+".jpg", #PB_ImagePlugin_JPEG) = 0
MessageRequester(#TitleMain, "Impossible d'enregistrer l'image temporaire " + "File_"+ImageEnCours)
End
EndIf
FreeImage(#IMAGE_LoadSaveTempo)
EndIf
EndIf
EndProcedure
;}