CanvasGadget Variation

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: CanvasGadget Variation

Message par falsam »

blendman a écrit :Sinon, Falsam, y'a une erreur dans ta correction ici ....
Oops bien vu. Le code de base était pas évident à lire :)

:arrow: Code mise à jour.
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%
david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: CanvasGadget Variation

Message par david »

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

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
  

  
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: CanvasGadget Variation

Message par blendman »

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 :

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
Il vaut mieux ça :

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...
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 :

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)
J'ai remanié un peu ton codecar ce n'était pas très lisible) :

Code : Tout sélectionner

2. la fentre #Fenetre_ChxBrush ne se referme pas quand j'ai cliqué sur un brush : 
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

Code : Tout sélectionner

3b. la fenetre #Fenetre_ChxLine ne veut pas se fermer
à 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 :

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 
;}


david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: CanvasGadget Variation

Message par david »

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!

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
;}

david
Messages : 208
Inscription : jeu. 03/févr./2005 21:10

Re: CanvasGadget Variation

Message par david »

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

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
;}

Répondre