Oops bien vu. Le code de base était pas évident à lireblendman a écrit :Sinon, Falsam, y'a une erreur dans ta correction ici ....
CanvasGadget Variation
- falsam
- Messages : 7334
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: CanvasGadget Variation
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: CanvasGadget Variation
bon, ça avance
par contre j'ai plusieurs problèmes:
1. lignes 70 à 74 : le brush encours (correspondant à la valeur obj1dflt ne se sélectionne pas à l'ouverture de la fenêtre #Fenetre_ChxBrush
2. la fentre #Fenetre_ChxBrush ne se referme pas quand j'ai cliqué sur un brush
3. la fenetre #Fenetre_ChxBrush doit etre cliquée pour etre fermée
3b. la fenetre #Fenetre_ChxLine ne veut pas se fermer
merci d'avance
david t
par contre j'ai plusieurs problèmes:
1. lignes 70 à 74 : le brush encours (correspondant à la valeur obj1dflt ne se sélectionne pas à l'ouverture de la fenêtre #Fenetre_ChxBrush
2. la fentre #Fenetre_ChxBrush ne se referme pas quand j'ai cliqué sur un brush
3. la fenetre #Fenetre_ChxBrush doit etre cliquée pour etre fermée
3b. la fenetre #Fenetre_ChxLine ne veut pas se fermer
merci d'avance
david t
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
Re: CanvasGadget Variation
salut
Quelques remarques qui pourraient t'être utiles
:
- ne mélange pas les enumérations (gadgets/images, etc..), fais à chaque fois une nouvelle énumération par type "d'objets" (images, gadgets, etc...)
Changer ça par exemple :
Il vaut mieux ça :
Lorsque tu répètes des lignes, il vaut mieux utiliser une macro ou une procédure.
Exemple :
Tu peux remplacer tes création de bouton de brush :
par :
J'ai remanié un peu ton codecar ce n'était pas très lisible) :
j'ai corrigé. Tu ne peux pas dire de toi-même que c'est tel event qui est fonctionnel, il vaut mieux passer par une variable quit = 1
à aucun moment tu n'indiquais de la fermer
.
Je te laisse trouver pour le reste ^^
Voici le code corrigé et remanié pour que ce soit un peu plus lisible :
Quelques remarques qui pourraient t'être utiles
- ne mélange pas les enumérations (gadgets/images, etc..), fais à chaque fois une nouvelle énumération par type "d'objets" (images, gadgets, etc...)
Changer ça par exemple :
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...
Exemple :
Tu peux remplacer tes création de bouton de brush :
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....par :
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 fermerJe te laisse trouver pour le reste ^^
Voici le code corrigé et remanié pour que ce soit un peu plus lisible :
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
;}
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: CanvasGadget Variation
C'est trop super, j'ai rajouté ce qu'il manquait et c'est imppecable, merci pour l'aide !!!
après restera plus qu'a rajouter des objets, menu imprimer.... j'ai plein d'idée mais c'est déjà plus que fonctionnel!!!
si quelqu'un a d'autres idées...
ps: juste la fonction "ligne" qui fait pas beau quand on trace des diagonales faut que je revois ça
Par contre, je n'arrive pas à bloquer les boutons de la fenetre "#Fenetre_Principale" quand la fenetre "#Fenetre_ChxBrush" ou "#Fenetre_ChxLine" ou #Fenetre_ChxObjet" est ouverte. De ce fait si "#Fenetre_ChxBrush" par exemple est ouverte et qu'on ne valide pas en cliquant sur une taille ou fermer, mais sur une autre fonction du programme (genre "Remplir") ça plante!
pour Undo/Redo il faut un dossier 'tempo' créé dans le répertoire en cours. bon ça serait peut être mieux d'enregistrer les images en memoire plutot que physiquement sur le disque dur, mais au moins ca a le merite de fonctionner...
merci , merci!
après restera plus qu'a rajouter des objets, menu imprimer.... j'ai plein d'idée mais c'est déjà plus que fonctionnel!!!
si quelqu'un a d'autres idées...
ps: juste la fonction "ligne" qui fait pas beau quand on trace des diagonales faut que je revois ça
Par contre, je n'arrive pas à bloquer les boutons de la fenetre "#Fenetre_Principale" quand la fenetre "#Fenetre_ChxBrush" ou "#Fenetre_ChxLine" ou #Fenetre_ChxObjet" est ouverte. De ce fait si "#Fenetre_ChxBrush" par exemple est ouverte et qu'on ne valide pas en cliquant sur une taille ou fermer, mais sur une autre fonction du programme (genre "Remplir") ça plante!
pour Undo/Redo il faut un dossier 'tempo' créé dans le répertoire en cours. bon ça serait peut être mieux d'enregistrer les images en memoire plutot que physiquement sur le disque dur, mais au moins ca a le merite de fonctionner...
merci , merci!
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
;}
Re: CanvasGadget Variation
Bon j'ai bien avancé.
Cependant j'aurais voulu modifier "LoadTempo" "SaveTempo" pour mémoriser les images temporaire et ne pas les enregistrer physiquement sur le disque dur (perd en rapidité sur les vieux pc et inutile de toute façon d'avoir une sauvegarde, et en plus il faut cérer le sous dossier "\tempo"). De ce fait EraseTempo viderais la mémoire, et DecaleTempo changerais l'image temporaire en cours.
Je pense que ça ne doit pas être méga sorcier , mais quand ça veut pas, ça veut pas.
Merci d'avance
Cependant j'aurais voulu modifier "LoadTempo" "SaveTempo" pour mémoriser les images temporaire et ne pas les enregistrer physiquement sur le disque dur (perd en rapidité sur les vieux pc et inutile de toute façon d'avoir une sauvegarde, et en plus il faut cérer le sous dossier "\tempo"). De ce fait EraseTempo viderais la mémoire, et DecaleTempo changerais l'image temporaire en cours.
Je pense que ça ne doit pas être méga sorcier , mais quand ça veut pas, ça veut pas.
Merci d'avance
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
;}