Page 1 sur 2

CanvasGadget Variation

Publié : ven. 04/avr./2014 14:01
par david
Bonjour,
J'ai travaillé sur CanvasGadget (exemple purebasic) car je veux faire un logiciel de dessin pour mes filles.
J'ai avancé sur le code ci-après, mais je veux rajouter d'autres outils (rajout de différentes formes, Texte + gestion TailleTexte, Annuler la dernière commande....)
Il faut donc que j'affiche :

PosX
PosY
Pinceau (clique=> ouvre fenetre sélection Pinceau1, Pinceau2, Pinceau3, Pinceau4, Pinceau5=
Trait => Trait1, Trait2, Trait3, Trait4, Trait5
Forme => Carré, Rectangle, Rond, Ellipse

Ce qui permet de gagner de la place pour les icones possibles, mais surtout ça fait pro et propre
Merci pour votre aide (je suis débuttant)

De plus les commandes trait sont pas bien faites en diagonales!
Je n'arrive pas à récupérer des icones systemes pour remplacer "Enregistrer"

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 
  #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
  #GADGET_Fill
  #GADGET_Clear 
  #GADGET_Load
  #GADGET_Save
  #GADGET_PosX: #GADGET_PosY
EndEnumeration

;####################################################################### PARAM PERSO ##########
#Author ="PB"
#TitleMain ="CanvasGadget Variation"
#Title = #TitleMain+" "+#Author

#NbButton = 20
#PasButton=5 ;espace vide entre fin bouton et fin écran
#ChxButtonDflt =#GADGET_Brush2 ; 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 ="Trait"
#Outil_CircleCircle ="Cercle":#Outil_Circle="Ellipse"
#Outil_BoxBox ="Carré" : #Outil_Box="Rectangle"
;####################################################################### FIN PARAM PERSO ##########


 If ExamineDesktops()                            ; Liste les bureaux
         Larg  = DesktopWidth(0)                 ; Largeur actuelle
         Haut = DesktopHeight(0)                 ; Hauteur actuelle
         Coul  = DesktopDepth(0)                 ; Profondeur de couleurs actuelle
         CentreX=Width/2
         CentreY=Height/2
         TailleButtonX.l = 50
         TailleButtonY.l = (Haut-61)/#NbButton
 EndIf        
 
 

Global CurrentColor, CurrentMode, StartX, StartY
 
; 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_Brush1
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille11, CurrentColor)
        EndIf
       Case #GADGET_Brush2
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille12, CurrentColor)
        EndIf
        Case #GADGET_Brush3
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille13, CurrentColor)
        EndIf
        Case #GADGET_Brush4
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille14, CurrentColor)
        EndIf                 
            Case #GADGET_Brush5
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille15, CurrentColor)
        EndIf                 
        
 
        
      Case #GADGET_Line1
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        
      Case #GADGET_Line2
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        LineXY(StartX+1, StartY+1, x+1, y+1, CurrentColor)
        
       Case #GADGET_Line3
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        LineXY(StartX+1, StartY+1, x+1, y+1, CurrentColor)
        LineXY(StartX+2, StartY+2, x+2, y+2, CurrentColor)
        LineXY(StartX+3, StartY+3, x+3, y+3, CurrentColor)
        
        Case #GADGET_Line4
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        LineXY(StartX+1, StartY+1, x+1, y+1, CurrentColor)
        LineXY(StartX+2, StartY+2, x+2, y+2, CurrentColor)
        LineXY(StartX+3, StartY+3, x+3, y+3, CurrentColor)
        LineXY(StartX+4, StartY+4, x+4, y+4, CurrentColor)
        LineXY(StartX+5, StartY+5, x+5, y+5, CurrentColor)
        
        Case #GADGET_Line5
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        LineXY(StartX+1, StartY+1, x+1, y+1, CurrentColor)
        LineXY(StartX+2, StartY+2, x+2, y+2, CurrentColor)
        LineXY(StartX+3, StartY+3, x+3, y+3, CurrentColor)
        LineXY(StartX+4, StartY+4, x+4, y+4, CurrentColor)
        LineXY(StartX+5, StartY+5, x+5, y+5, CurrentColor)
        LineXY(StartX+6, StartY+6, x+6, y+6, CurrentColor)
        LineXY(StartX+7, StartY+7, x+7, y+7, CurrentColor)
        
      ;Case #GADGET_Triangle  
      ;  MessageRequester("","non disponible")
        
      Case #GADGET_BoxBox ;carré
        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_Box ;rectangle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        Box(StartX, StartY, x-StartX, y-StartY, CurrentColor)
        
        
      Case #GADGET_CircleCircle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        If x > StartX 
          rx = x - StartX:Ellipse(StartX, StartY, rx, rx, CurrentColor)
        Else 
        rx = StartX - x:Ellipse(StartX, StartY, rx, rx, CurrentColor)
        EndIf
        
        If y > StartY
          ry = y - StartY:   Ellipse(StartX, StartY, ry, ry, CurrentColor)
        Else
          ry = StartY - y: Ellipse(StartX, StartY, ry, ry, CurrentColor)
        EndIf

      
        
        Case #GADGET_Circle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        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)
      
      Case #GADGET_Fill
        If EventType = #PB_EventType_LeftButtonDown
          FillArea(x, y, -1, CurrentColor)
        EndIf
  
    EndSelect
    
    StopDrawing()
  EndIf

EndProcedure

UseJPEGImageDecoder()
UseJPEGImageEncoder()

;********************************************************************************************************
;################################################################################ creer images 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
 ;
;############################################################################## fin creer images boutons ################


;********************************************************************************************************



CurrentColor = $000000
CurrentMode  = #ChxButtonDflt
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content,  Larg+TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24)

If OpenWindow(0, 0, 0, Larg+TailleButtonX-#PasButton*10, Haut, #Title, #PB_Window_SystemMenu | #PB_Window_ScreenCentered |  #PB_Window_MinimizeGadget )
  CanvasGadget(#GADGET_Canvas, 0+TailleButtonX+#PasButton,0,Larg-TailleButtonX,Haut, #PB_Canvas_ClipMouse)
  
  TextGadget(#GADGET_PosX,   2, 0,  TailleButtonX, TailleButtonY/2, "PosX") ;positionX
  TextGadget(#GADGET_PosY,   2, TailleButtonY/2,  TailleButtonX, TailleButtonY/2, "PosY") ;positionY
  
  ButtonImageGadget(#GADGET_Color, 2, TailleButtonY,  TailleButtonX, TailleButtonY, ImageID(#IMAGE_Color))
   GadgetToolTip(#GADGET_Color, #ChxCol)
  
  ButtonImageGadget(#GADGET_Brush1,  2, TailleButtonY*2, TailleButtonX, TailleButtonY,   ImageID(11),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush2,  2, TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(12),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush3,  2, TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(13),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush4,  2, TailleButtonY*5, TailleButtonX, TailleButtonY, ImageID(14),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush5,  2, TailleButtonY*6, TailleButtonX, TailleButtonY, ImageID(15),  #PB_Button_Toggle) 
   GadgetToolTip(#GADGET_Brush1,#Outil1):GadgetToolTip(#GADGET_Brush2,#Outil1):GadgetToolTip(#GADGET_Brush3,#Outil1):GadgetToolTip(#GADGET_Brush4,#Outil1):GadgetToolTip(#GADGET_Brush5,#Outil1)
  
  ButtonImageGadget(#GADGET_Line1,   2, TailleButtonY*7, TailleButtonX, TailleButtonY, ImageID(21),   #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Line2,   2, TailleButtonY*8, TailleButtonX, TailleButtonY, ImageID(22),   #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Line3,   2, TailleButtonY*9, TailleButtonX, TailleButtonY, ImageID(23),   #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Line4,   2, TailleButtonY*10, TailleButtonX, TailleButtonY, ImageID(24),   #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Line5,   2, TailleButtonY*11, TailleButtonX, TailleButtonY,ImageID(25),   #PB_Button_Toggle)
   GadgetToolTip(#GADGET_Line1,#Outil2):GadgetToolTip(#GADGET_Line2,#Outil2):GadgetToolTip(#GADGET_Line3,#Outil2):GadgetToolTip(#GADGET_Line4,#Outil2):GadgetToolTip(#GADGET_Line5,#Outil2)

   ButtonImageGadget(#GADGET_BoxBox,    2, TailleButtonY*12, TailleButtonX, TailleButtonY, ImageID(31),    #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Box,    2, TailleButtonY*13, TailleButtonX, TailleButtonY, ImageID(32),    #PB_Button_Toggle)
    GadgetToolTip(#GADGET_BoxBox, #Outil_BoxBox):GadgetToolTip(#GADGET_Box ,#Outil_Box)
   ButtonImageGadget(#GADGET_CircleCircle, 2, TailleButtonY*14, TailleButtonX, TailleButtonY, ImageID(33), #PB_Button_Toggle)
   ButtonImageGadget(#GADGET_Circle, 2, TailleButtonY*15, TailleButtonX, TailleButtonY, ImageID(34), #PB_Button_Toggle)
    GadgetToolTip(#GADGET_CircleCircle,#Outil_CircleCircle):GadgetToolTip(#GADGET_Circle,#Outil_Circle)
   ; ButtonGadget(#GADGET_Triangle, 2, TailleButtonY*13, TailleButtonX, TailleButtonY, "Triangle", #PB_Button_Toggle)
  
  ButtonGadget(#GADGET_Fill,   2, TailleButtonY*16, TailleButtonX, TailleButtonY, "Remplir",   #PB_Button_Toggle)
    
  ButtonGadget(#GADGET_Clear,  2, TailleButtonY*17,  TailleButtonX, TailleButtonY, "Effacer")
  
  ButtonGadget(#GADGET_Load,   2, TailleButtonY*19,  TailleButtonX, TailleButtonY, "Charger")
  ButtonGadget(#GADGET_Save,   2, TailleButtonY*20, TailleButtonX, TailleButtonY, "Enregistrer")
  
  SetGadgetState(#ChxButtonDflt, 1)
  SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)

  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
      
      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 EventGadget()
      
        Case #GADGET_Canvas
          X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
          Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
          Type = EventType()
        
          Select EventType()
          
            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
              
              StartX = X
              StartY = Y
              DrawAction(X, Y, EventType())

            
            Case #PB_EventType_LeftButtonUp
              DrawAction(X, Y, EventType())                        
            
            Case #PB_EventType_MouseMove
              If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
                DrawAction(X, Y, EventType())            
              EndIf
                      
          EndSelect
        
        Case #GADGET_Color
          CurrentColor = ColorRequester(CurrentColor)
          If StartDrawing(ImageOutput(#IMAGE_Color))
            Box(0,0, 35, 35, CurrentColor)
            StopDrawing()
            SetGadgetAttribute(#GADGET_Color, #PB_Button_Image, ImageID(#IMAGE_Color))
          EndIf
          
        Case #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_Fill ;#GADGET_Triangle;;gère la sélection de l'outil
          EventGadget = EventGadget()
          For Gadget = #GADGET_Brush1 To #GADGET_Fill
            If Gadget = EventGadget
              SetGadgetState(Gadget, 1) 
            Else
              SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
            EndIf
          Next Gadget          
          CurrentMode = EventGadget             
      
        Case #GADGET_Clear
          If StartDrawing(CanvasOutput(#GADGET_Canvas))
            Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
            StopDrawing()
          EndIf
      
        Case #GADGET_Load
          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()
              EndIf
              FreeImage(#IMAGE_LoadSave)
            Else
              MessageRequester(#TitleMain, "Impossible de charger l'image: " + File$)
            EndIf
          EndIf
              
        Case #GADGET_Save
          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()
              
              If SaveImage(#IMAGE_LoadSave, File$+".jpg", #PB_ImagePlugin_JPEG) = 0
                MessageRequester(#TitleMain, "Impossible d'enregistrer l'image: " + File$)
              EndIf
              
              FreeImage(#IMAGE_LoadSave)
            EndIf            
          EndIf
                
      EndSelect
    
    EndIf
    
  Until Event = #PB_Event_CloseWindow

EndIf






1.

Re: CanvasGadget Variation

Publié : ven. 04/avr./2014 14:17
par falsam
Positionne ton Canvas plus bas (y=40 par exemple) et insere juste avant un toolbar.

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 500, 300, "ToolBar", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateToolBar(0, WindowID(0))
    ToolBarStandardButton(0, #PB_ToolBarIcon_New)
    ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
  EndIf
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Menu
      Debug "ToolBar ID: "+Str(EventMenu())
    EndIf
  Until Event = #PB_Event_CloseWindow 
EndIf

Re: CanvasGadget Variation

Publié : ven. 04/avr./2014 16:16
par david
Reste a gérer l'affichage de :

PosX
PosY
Pinceau (clique=> ouvre fenetre sélection Pinceau1, Pinceau2, Pinceau3, Pinceau4, Pinceau5=
Trait => Trait1, Trait2, Trait3, Trait4, Trait5
Forme => Carré, Rectangle, Rond, Ellipse

merci pour l'aide
david

Code : Tout sélectionner

Enumeration
  #IMAGE_Content  ; stores the previous CanvasGadget content while the mouse is down
  #IMAGE_Color
  #IMAGE_LoadSave 
  #BarreMenu
EndEnumeration

Enumeration
  #GADGET_Canvas
  #GADGET_Color 
  #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
  #GADGET_Fill
  #GADGET_Clear 
  #GADGET_Load
  #GADGET_Save
  #GADGET_PosX: #GADGET_PosY
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
#ChxButtonDflt =#GADGET_Brush2 ; 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 ="Trait"
#Outil_CircleCircle ="Cercle":#Outil_Circle="Ellipse"
#Outil_BoxBox ="Carré" : #Outil_Box="Rectangle"
;####################################################################### FIN PARAM PERSO ##########


 If ExamineDesktops()                            ; Liste les bureaux
         Larg  = DesktopWidth(0)                 ; Largeur actuelle
         Haut = DesktopHeight(0)                 ; Hauteur actuelle
         Coul  = DesktopDepth(0)                 ; Profondeur de couleurs actuelle
         CentreX=Width/2
         CentreY=Height/2
         TailleButtonX.l = 50
         TailleButtonY.l = (Haut-61)/#NbButton
 EndIf        
 
 

Global CurrentColor, CurrentMode, StartX, StartY
 
; 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_Brush1
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille11, CurrentColor)
        EndIf
       Case #GADGET_Brush2
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille12, CurrentColor)
        EndIf
        Case #GADGET_Brush3
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille13, CurrentColor)
        EndIf
        Case #GADGET_Brush4
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille14, CurrentColor)
        EndIf                 
            Case #GADGET_Brush5
        If EventType = #PB_EventType_LeftButtonDown Or EventType = #PB_EventType_MouseMove
          Circle(x, y, #Taille15, CurrentColor)
        EndIf                 
        
 
        
      Case #GADGET_Line1
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        
      Case #GADGET_Line2
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        LineXY(StartX+1, StartY+1, x+1, y+1, CurrentColor)
        
       Case #GADGET_Line3
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        LineXY(StartX+1, StartY+1, x+1, y+1, CurrentColor)
        LineXY(StartX+2, StartY+2, x+2, y+2, CurrentColor)
        LineXY(StartX+3, StartY+3, x+3, y+3, CurrentColor)
        
        Case #GADGET_Line4
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        LineXY(StartX+1, StartY+1, x+1, y+1, CurrentColor)
        LineXY(StartX+2, StartY+2, x+2, y+2, CurrentColor)
        LineXY(StartX+3, StartY+3, x+3, y+3, CurrentColor)
        LineXY(StartX+4, StartY+4, x+4, y+4, CurrentColor)
        LineXY(StartX+5, StartY+5, x+5, y+5, CurrentColor)
        
        Case #GADGET_Line5
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        LineXY(StartX, StartY, x, y, CurrentColor)
        LineXY(StartX+1, StartY+1, x+1, y+1, CurrentColor)
        LineXY(StartX+2, StartY+2, x+2, y+2, CurrentColor)
        LineXY(StartX+3, StartY+3, x+3, y+3, CurrentColor)
        LineXY(StartX+4, StartY+4, x+4, y+4, CurrentColor)
        LineXY(StartX+5, StartY+5, x+5, y+5, CurrentColor)
        LineXY(StartX+6, StartY+6, x+6, y+6, CurrentColor)
        LineXY(StartX+7, StartY+7, x+7, y+7, CurrentColor)
        
      ;Case #GADGET_Triangle  
      ;  MessageRequester("","non disponible")
        
      Case #GADGET_BoxBox ;carré
        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_Box ;rectangle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        Box(StartX, StartY, x-StartX, y-StartY, CurrentColor)
        
        
      Case #GADGET_CircleCircle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        If x > StartX 
          rx = x - StartX:Ellipse(StartX, StartY, rx, rx, CurrentColor)
        Else 
        rx = StartX - x:Ellipse(StartX, StartY, rx, rx, CurrentColor)
        EndIf
        
        If y > StartY
          ry = y - StartY:   Ellipse(StartX, StartY, ry, ry, CurrentColor)
        Else
          ry = StartY - y: Ellipse(StartX, StartY, ry, ry, CurrentColor)
        EndIf

      
        
        Case #GADGET_Circle
        DrawImage(ImageID(#IMAGE_Content), 0, 0)
        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)
      
      Case #GADGET_Fill
        If EventType = #PB_EventType_LeftButtonDown
          FillArea(x, y, -1, CurrentColor)
        EndIf
  
    EndSelect
    
    StopDrawing()
  EndIf

EndProcedure

UseJPEGImageDecoder()
UseJPEGImageEncoder()

;********************************************************************************************************
;################################################################################ creer images 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
 ;
 
;############################################################################## fin creer images boutons ################


;********************************************************************************************************



CurrentColor = $000000
CurrentMode  = #ChxButtonDflt
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content,  Larg+TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24)

If OpenWindow(0, 0, 0, Larg+TailleButtonX-#PasButton*10, #PmMenu+Haut, #Title, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  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_Brush1,  2, #Pmmenu+TailleButtonY*2, TailleButtonX, TailleButtonY,   ImageID(11),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush2,  2, #Pmmenu+TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(12),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush3,  2, #Pmmenu+TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(13),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush4,  2, #Pmmenu+TailleButtonY*5, TailleButtonX, TailleButtonY, ImageID(14),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush5,  2, #Pmmenu+TailleButtonY*6, TailleButtonX, TailleButtonY, ImageID(15),  #PB_Button_Toggle) 
   GadgetToolTip(#GADGET_Brush1,#Outil1):GadgetToolTip(#GADGET_Brush2,#Outil1):GadgetToolTip(#GADGET_Brush3,#Outil1):GadgetToolTip(#GADGET_Brush4,#Outil1):GadgetToolTip(#GADGET_Brush5,#Outil1)
  
  ButtonImageGadget(#GADGET_Line1,   2, #Pmmenu+TailleButtonY*7, TailleButtonX, TailleButtonY, ImageID(21),   #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Line2,   2, #Pmmenu+TailleButtonY*8, TailleButtonX, TailleButtonY, ImageID(22),   #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Line3,   2, #Pmmenu+TailleButtonY*9, TailleButtonX, TailleButtonY, ImageID(23),   #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Line4,   2, #Pmmenu+TailleButtonY*10, TailleButtonX, TailleButtonY, ImageID(24),   #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Line5,   2, #Pmmenu+TailleButtonY*11, TailleButtonX, TailleButtonY,ImageID(25),   #PB_Button_Toggle)
   GadgetToolTip(#GADGET_Line1,#Outil2):GadgetToolTip(#GADGET_Line2,#Outil2):GadgetToolTip(#GADGET_Line3,#Outil2):GadgetToolTip(#GADGET_Line4,#Outil2):GadgetToolTip(#GADGET_Line5,#Outil2)

   ButtonImageGadget(#GADGET_BoxBox,    2, #Pmmenu+TailleButtonY*12, TailleButtonX, TailleButtonY, ImageID(31),    #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Box,    2, #Pmmenu+TailleButtonY*13, TailleButtonX, TailleButtonY, ImageID(32),    #PB_Button_Toggle)
    GadgetToolTip(#GADGET_BoxBox, #Outil_BoxBox):GadgetToolTip(#GADGET_Box ,#Outil_Box)
   ButtonImageGadget(#GADGET_CircleCircle, 2, #Pmmenu+TailleButtonY*14, TailleButtonX, TailleButtonY, ImageID(33), #PB_Button_Toggle)
   ButtonImageGadget(#GADGET_Circle, 2, #Pmmenu+TailleButtonY*15, TailleButtonX, TailleButtonY, ImageID(34), #PB_Button_Toggle)
    GadgetToolTip(#GADGET_CircleCircle,#Outil_CircleCircle):GadgetToolTip(#GADGET_Circle,#Outil_Circle)
   ; ButtonGadget(#GADGET_Triangle, 2, #Pmmenu+TailleButtonY*13, TailleButtonX, TailleButtonY, "Triangle", #PB_Button_Toggle)
  
  ButtonGadget(#GADGET_Fill,   2, #Pmmenu+TailleButtonY*16, TailleButtonX, TailleButtonY, "Remplir",   #PB_Button_Toggle)
    
  
    OpenWindow(#BarreMenu, 0, 0, 500, 300, "#BarreMenu", #PB_Window_SystemMenu )
    CreateToolBar(#BarreMenu, WindowID(0))
 
    
    ToolBarStandardButton(#GADGET_Clear, #PB_ToolBarIcon_New)
    ToolBarStandardButton(#GADGET_Load, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(#GADGET_Save, #PB_ToolBarIcon_Save)
    
 
   


  
  
  
  SetGadgetState(#ChxButtonDflt, 1)
  SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)

  Repeat
    Event = WaitWindowEvent()
    
    
    
;***********GESTION DU MENU*****************************************
If Event = #PB_Event_Menu
    
       Select EventGadget()   
        Case #GADGET_Clear
          If StartDrawing(CanvasOutput(#GADGET_Canvas))
            Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
            StopDrawing()
          EndIf
          
          
        Case #GADGET_Load
          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()
              EndIf
              FreeImage(#IMAGE_LoadSave)
            Else
              MessageRequester(#TitleMain, "Impossible de charger l'image: " + File$)
            EndIf
          EndIf
          
          
        Case #GADGET_Save
          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()
              
              If SaveImage(#IMAGE_LoadSave, File$+".jpg", #PB_ImagePlugin_JPEG) = 0
                MessageRequester(#TitleMain, "Impossible d'enregistrer l'image: " + File$)
              EndIf
              
              FreeImage(#IMAGE_LoadSave)
            EndIf            
          EndIf  
         
      EndSelect 
   EndIf   
 ;***********FIN GESTION DU MENU*****************************************
    
 
 
 
 
 
 
 
 
;***********GESTION DES OUTILS*****************************************    
    
    If Event = #PB_Event_Gadget
      
     
      
      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 EventGadget()
      
        Case #GADGET_Canvas
          X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
          Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
          Type = EventType()
        
          Select EventType()
          
            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
              
              StartX = X
              StartY = Y
              DrawAction(X, Y, EventType())

            
            Case #PB_EventType_LeftButtonUp
              DrawAction(X, Y, EventType())                        
            
            Case #PB_EventType_MouseMove
              If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
                DrawAction(X, Y, EventType())            
              EndIf
                      
          EndSelect
        
               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_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_Fill ;#GADGET_Triangle;;gère la sélection de l'outil
          EventGadget = EventGadget()
          For Gadget = #GADGET_Brush1 To #GADGET_Fill
            If Gadget = EventGadget
              SetGadgetState(Gadget, 1) 
            Else
              SetGadgetState(Gadget, 0) ; unset the state of all other gadgets
            EndIf
          Next Gadget          
          CurrentMode = EventGadget             
      
        
                
      EndSelect
    
    EndIf
    
  Until Event = #PB_Event_CloseWindow

EndIf






Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 10:59
par david
bon je n'y arrive plus!!! j'ai un peu amélioré mais je suis coincé.
c'est moche de mettre un "gosub ChxBruh", "gosub ChxLine", "gosub ChxObjet"
c'est pas dans la boucle alors ma fenetre principale disparait

j'aurais voulu que:
- ma fenetre principale reste en arriere plan de la secondaire
- la taille de l'outil en cours dans la fenetre secondaire soi en surbrillance (et agisse comme dans la principale quand on change d'outils "selection/deselection")
- que la taille validée de la secondaire soit prise en compte dans le prog principal.

je commence a ramer sévère. merci pour l'aide et les conseils
david


;********************************************************************************************************
IncludeFile("Button_Draw.pb") ;création de l'affichage des boutonds de cammandes************************
;********************************************************************************************************

Code : Tout sélectionner

;################################################################################ creer images 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
 ;
 
;############################################################################## fin creer images boutons ################


programme principal :

Code : Tout sélectionner

Enumeration
  #IMAGE_Content  ; stores the previous CanvasGadget content while the mouse is down
  #IMAGE_Color
  #IMAGE_LoadSave 
  #BarreMenu
EndEnumeration

Enumeration
  #GADGET_Canvas
  #GADGET_Color 
  
  #GADGET_Brush0:#GADGET_Line0 : #GADGET_Box0      : #GADGET_Fill ;#######!!!!!!finir par #GADGET_Fill a cause du for to ligne 289
  
  #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
  #GADGET_Clear 
  #GADGET_Load
  #GADGET_Save
  #GADGET_PosX: #GADGET_PosY
EndEnumeration

Declare EnregDessin()
;####################################################################### PARAM PERSO ##########
#Author ="PB"
#TitleMain ="CanvasGadget Variation"
#Title = #TitleMain+" "+#Author

#NbButton = 20:#Pmmenu=30
#PasButton=5 ;espace vide entre fin bouton et fin écran
#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"
;####################################################################### FIN PARAM PERSO ##########
 NbDess=0 : EnregDess=0

 If ExamineDesktops()                            ; Liste les bureaux
         Larg  = DesktopWidth(0)                 ; Largeur actuelle
         Haut = DesktopHeight(0)                 ; Hauteur actuelle
         Coul  = DesktopDepth(0)                 ; Profondeur de couleurs actuelle
         CentreX=Width/2
         CentreY=Height/2
         TailleButtonX.l = 50
         TailleButtonY.l = (Haut-61)/#NbButton
 EndIf        
 
 

Global CurrentColor, CurrentMode, StartX, StartY
 
; 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
          Circle(x, y, #Taille12, 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
        
        
        
        
        
    EndSelect
    
    StopDrawing()
  EndIf

EndProcedure

UseJPEGImageDecoder()
UseJPEGImageEncoder()

;********************************************************************************************************
IncludeFile("Button_Draw.pb") ;création de l'affichage des boutonds de cammandes************************
;********************************************************************************************************



CurrentColor = $000000
CurrentMode  = #ChxButtonDflt
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content,  Larg+TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24)

If OpenWindow(0, 0, 0, Larg+TailleButtonX-#PasButton*10, #PmMenu+Haut, #Title, #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget  | #PB_Window_ScreenCentered)
  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(12),  #PB_Button_Toggle)
   GadgetToolTip(#GADGET_Brush0,#Outil1)
  
  ButtonImageGadget(#GADGET_Line0,   2, #Pmmenu+TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(21),   #PB_Button_Toggle)
 
   GadgetToolTip(#GADGET_Line0,#Outil2)

   ButtonImageGadget(#GADGET_Box0,    2, #Pmmenu+TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(31),    #PB_Button_Toggle)
    GadgetToolTip(#GADGET_Box0, #Outil3)
    
    
    
    
  
  ButtonGadget(#GADGET_Fill,   2, #Pmmenu+TailleButtonY*5, TailleButtonX, TailleButtonY, "Remplir",   #PB_Button_Toggle)
     
   CreateToolBar(#BarreMenu, WindowID(0))
     
    ToolBarStandardButton(#GADGET_Clear, #PB_ToolBarIcon_New)
    ToolBarStandardButton(#GADGET_Load, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(#GADGET_Save, #PB_ToolBarIcon_Save)
    
 
   


  
  
  
  SetGadgetState(#ChxButtonDflt, 1)
  SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)

  Repeat
    Event = WaitWindowEvent()
    
    
    
;***********GESTION DU MENU*****************************************
If Event = #PB_Event_Menu
  
  
  
       Select EventGadget()   
         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
               Gosub SaveDessin
            EndIf
        
        
        If Resultat<>2 :NbDess=0
            Gosub va_effacer
        EndIf
        EndIf
        If NbDess=0: Gosub 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
               Gosub SaveDessin
            EndIf
            
             EndIf
        
        If Resultat=6  Or Resultat=7 Or NbDess=0 
            Gosub LoadDessin
       
        EndIf          
       
        
        
        
        Case #GADGET_Save
         Gosub SaveDessin
         
         
      EndSelect 
   EndIf   
 ;***********FIN GESTION DU MENU*****************************************
    
 
 
 
 
 
 
 
 
;***********GESTION DES OUTILS*****************************************    
    
    If Event = #PB_Event_Gadget
      
    
      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 EventGadget()
      
        Case #GADGET_Canvas
          X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
          Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
          Type = EventType()
        
          Select EventType()
          
            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, EventType())

            
            Case #PB_EventType_LeftButtonUp
              DrawAction(X, Y, EventType())                        
            
            Case #PB_EventType_MouseMove
              If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
                DrawAction(X, Y, EventType())            
              EndIf
                      
          EndSelect
        
               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_Brush0,#GADGET_Line0,#GADGET_Box0, #GADGET_Fill;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 Gadget          
          CurrentMode = EventGadget             
          
          
          If  EventGadget=#GADGET_Brush0
            Gosub ChxBrush:;MessageRequester("brush","")
          EndIf
          
           If  EventGadget=#GADGET_Line0
            Gosub ChxLine:;MessageRequester("line","")
          EndIf
          
           If  EventGadget=#GADGET_Box0
            Gosub ChxObjet:;MessageRequester("objet","")
          EndIf
          
          
          
          
        
       
         
          
          
          
      EndSelect
    
    EndIf
    
  Until Event = #PB_Event_CloseWindow
  
  
   ;ferme le programme       
           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
               Gosub SaveDessin
            EndIf
        EndIf
EndIf
End





ChxBrush:
      If OpenWindow(0, 0, 0, 400, 200, "#Title", #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget )
  
  ButtonImageGadget(#GADGET_Brush1,  0, 0, 40,40,   ImageID(11),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush2,  40, 0,40,40, ImageID(12),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush3,  80, 0,40,40, ImageID(13),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush4,  120, 0,40,40, ImageID(14),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush5,  1600, 0,40,40, ImageID(15),  #PB_Button_Toggle) 
  
  Repeat
    Event = WaitWindowEvent()
        
  Until Event = #PB_Event_CloseWindow
EndIf
         
Return


ChxLine:
Return

ChxObjet:
Return




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 
          Return
          
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         
          Return
          
          
  va_effacer:
     If StartDrawing(CanvasOutput(#GADGET_Canvas))
            Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
            StopDrawing()
          EndIf
          NbDess=0
         Return    

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 11:09
par falsam
Il manque une partie de ton code apparemment.
Constante introuvable #Taille11

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 11:21
par david
ben non mais vu que je suis débutant et que quand il y a trop de lignes je m'y perd j'ai posté le message de la maniere suivante

En partie de code 2 : le programme principal (qui appel includefile)
En partie de code 1 : le source de l'includefile

bon j'aurais du faire l'inverse

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 11:27
par falsam
Si je fais une recherche depuis mon navigateur de cette constante #Taille11 et je ne trouve pas sa déclaration.

Il s'agit toujours du logiciel de dessin pour ta fille ?

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 11:39
par david
oui c'est pour ma fille
depuis que je lui ai montré le porgramme elle me demande tous les soirs si j'ai rajouté des trucs, je suis trop fier (même si je débute et que je "bricole")
rien que ca ma license pb est amortie!!!

c'est elle qui m'avait demandée pourquoi il y avait tant d'outils, d'où mon souhait du sous-menu avec la taille pour les objets bruh, line, objet
elle veut pouvoir faire du texte aussi, mais sa sera une autre paire de manche...


ci-apres le prog complet (principal+includefile)

Code : Tout sélectionner

Enumeration
  #IMAGE_Content  ; stores the previous CanvasGadget content while the mouse is down
  #IMAGE_Color
  #IMAGE_LoadSave 
  #BarreMenu
EndEnumeration

Enumeration
  #GADGET_Canvas
  #GADGET_Color 
  
  #GADGET_Brush0:#GADGET_Line0 : #GADGET_Box0      : #GADGET_Fill ;#######!!!!!!finir par #GADGET_Fill a cause du for to ligne 289
  
  #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
  #GADGET_Clear 
  #GADGET_Load
  #GADGET_Save
  #GADGET_PosX: #GADGET_PosY
EndEnumeration

Declare EnregDessin()
;####################################################################### PARAM PERSO ##########
#Author ="PB"
#TitleMain ="CanvasGadget Variation"
#Title = #TitleMain+" "+#Author

#NbButton = 20:#Pmmenu=30
#PasButton=5 ;espace vide entre fin bouton et fin écran
#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"
;####################################################################### FIN PARAM PERSO ##########
 NbDess=0 : EnregDess=0

 If ExamineDesktops()                            ; Liste les bureaux
         Larg  = DesktopWidth(0)                 ; Largeur actuelle
         Haut = DesktopHeight(0)                 ; Hauteur actuelle
         Coul  = DesktopDepth(0)                 ; Profondeur de couleurs actuelle
         CentreX=Width/2
         CentreY=Height/2
         TailleButtonX.l = 50
         TailleButtonY.l = (Haut-61)/#NbButton
 EndIf        
 
 

Global CurrentColor, CurrentMode, StartX, StartY
 
; 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
          Circle(x, y, #Taille12, 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
        
        
        
        
        
    EndSelect
    
    StopDrawing()
  EndIf

EndProcedure

UseJPEGImageDecoder()
UseJPEGImageEncoder()

;********************************************************************************************************
;################################################################################ creer images 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
 ;
 
;############################################################################## fin creer images boutons ################


;********************************************************************************************************



CurrentColor = $000000
CurrentMode  = #ChxButtonDflt
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content,  Larg+TailleButtonX-#PasButton*2, Haut-#PasButton*5, 24)

If OpenWindow(0, 0, 0, Larg+TailleButtonX-#PasButton*10, #PmMenu+Haut, #Title, #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget  | #PB_Window_ScreenCentered)
  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(12),  #PB_Button_Toggle)
   GadgetToolTip(#GADGET_Brush0,#Outil1)
  
  ButtonImageGadget(#GADGET_Line0,   2, #Pmmenu+TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(21),   #PB_Button_Toggle)
 
   GadgetToolTip(#GADGET_Line0,#Outil2)

   ButtonImageGadget(#GADGET_Box0,    2, #Pmmenu+TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(31),    #PB_Button_Toggle)
    GadgetToolTip(#GADGET_Box0, #Outil3)
    
    
    
    
  
  ButtonGadget(#GADGET_Fill,   2, #Pmmenu+TailleButtonY*5, TailleButtonX, TailleButtonY, "Remplir",   #PB_Button_Toggle)
     
   CreateToolBar(#BarreMenu, WindowID(0))
     
    ToolBarStandardButton(#GADGET_Clear, #PB_ToolBarIcon_New)
    ToolBarStandardButton(#GADGET_Load, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(#GADGET_Save, #PB_ToolBarIcon_Save)
    
 
   


  
  
  
  SetGadgetState(#ChxButtonDflt, 1)
  SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)

  Repeat
    Event = WaitWindowEvent()
    
    
    
;***********GESTION DU MENU*****************************************
If Event = #PB_Event_Menu
  
  
  
       Select EventGadget()   
         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
               Gosub SaveDessin
            EndIf
        
        
        If Resultat<>2 :NbDess=0
            Gosub va_effacer
        EndIf
        EndIf
        If NbDess=0: Gosub 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
               Gosub SaveDessin
            EndIf
            
             EndIf
        
        If Resultat=6  Or Resultat=7 Or NbDess=0 
            Gosub LoadDessin
       
        EndIf          
       
        
        
        
        Case #GADGET_Save
         Gosub SaveDessin
         
         
      EndSelect 
   EndIf   
 ;***********FIN GESTION DU MENU*****************************************
    
 
 
 
 
 
 
 
 
;***********GESTION DES OUTILS*****************************************    
    
    If Event = #PB_Event_Gadget
      
    
      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 EventGadget()
      
        Case #GADGET_Canvas
          X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
          Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
          Type = EventType()
        
          Select EventType()
          
            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, EventType())

            
            Case #PB_EventType_LeftButtonUp
              DrawAction(X, Y, EventType())                        
            
            Case #PB_EventType_MouseMove
              If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
                DrawAction(X, Y, EventType())            
              EndIf
                      
          EndSelect
        
               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_Brush0,#GADGET_Line0,#GADGET_Box0, #GADGET_Fill;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 Gadget          
          CurrentMode = EventGadget             
          
          
          If  EventGadget=#GADGET_Brush0
            Gosub ChxBrush:;MessageRequester("brush","")
          EndIf
          
           If  EventGadget=#GADGET_Line0
            Gosub ChxLine:;MessageRequester("line","")
          EndIf
          
           If  EventGadget=#GADGET_Box0
            Gosub ChxObjet:;MessageRequester("objet","")
          EndIf
          
          
          
          
        
       
         
          
          
          
      EndSelect
    
    EndIf
    
  Until Event = #PB_Event_CloseWindow
  
  
   ;ferme le programme       
           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
               Gosub SaveDessin
            EndIf
        EndIf
EndIf
End





ChxBrush:
      If OpenWindow(0, 0, 0, 400, 200, "#Title", #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget )
  
  ButtonImageGadget(#GADGET_Brush1,  0, 0, 40,40,   ImageID(11),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush2,  40, 0,40,40, ImageID(12),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush3,  80, 0,40,40, ImageID(13),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush4,  120, 0,40,40, ImageID(14),  #PB_Button_Toggle)
  ButtonImageGadget(#GADGET_Brush5,  1600, 0,40,40, ImageID(15),  #PB_Button_Toggle) 
  
  Repeat
    Event = WaitWindowEvent()
        
  Until Event = #PB_Event_CloseWindow
EndIf
         
Return


ChxLine:
Return

ChxObjet:
Return




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 
          Return
          
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         
          Return
          
          
  va_effacer:
     If StartDrawing(CanvasOutput(#GADGET_Canvas))
            Box(0, 0, Larg-TailleButtonX-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
            StopDrawing()
          EndIf
          NbDess=0
         Return    

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 11:49
par falsam
Gloup !! pas facile de lire ta façon de coder. Le prix La Rache te pend au bout du nez. Maître Comtois se fera un plaisir de te le remettre. :mrgreen:

Le basic fête ses 50 ans mais ce n'est pas une raison pour coder de cette manière :)

Je regarde ton code.

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 12:05
par david
j'avais essayé de remplacer LoadDessin: .... par des procédure mais ça plantait tout le programme a chaque fois
j'ai bien conscience que d'avoir des procédures bien identifiées et correctement appelées c'est plus propres que des gosub/return
maintenant il faut dire que je suis né avec des goto partout et ça c'est maintenant proscrit :)

apres je vais essayer de rajouter des objets avec step pour qu'ils ne soient pas remplis pleinement
et mettre en mémoire l'image avec un numéro incrémenté a chaque modification comme ca on pourra mettre une fonction annuler/refaire...

je prends toutes les idees , suggestions d'amélioration, et surtout conseils et aide vu mon niveau

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 13:02
par falsam
J'ai mis un peut d'ordre dans ton code.

Attention à ta gestion d’événements. Gères l'ensemble de tes événements dans une seule boucle événementielle.

Deux fenêtres ne peuvent pas avoir le même identifiant. Dans ton code la fenêtre permettant de choisir la taille du pinceau avait le même identifiant que la fenêtre principale de l'application. Quand tu ouvrais cette fenêtre, la précédente était détruite.

J'ai commenté ce qui ne sert à rien dans ton code et l'ensemble de tes gosubs est devenu des procédures.

Je n'ai pas touché au scénario de ton code. Apparemment tu n'as pas encore codé ce qu'il se passe quand on sélectionne une taille du pinceau.

Code : Tout sélectionner

Enumeration Window
  #Fenetre_Principale
  #Fenetre_ChxBrush  
EndEnumeration

Enumeration
  #BarreMenu

  #IMAGE_Content  ; stores the previous CanvasGadget content while the mouse is down
  #IMAGE_Color
  #IMAGE_LoadSave 

  #GADGET_Canvas
  #GADGET_Color 
  
  #GADGET_Brush0 : #GADGET_Line0 : #GADGET_Box0  : #GADGET_Fill ;#######!!!!!!finir par #GADGET_Fill a cause du for to ligne 289  
  #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
  #GADGET_Clear 
  #GADGET_Load
  #GADGET_Save
  #GADGET_PosX: #GADGET_PosY
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
#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"

Global Event, WEvent, MEvent, GEvent, TEvent
Global CurrentColor, CurrentMode, StartX, StartY
Global NbDess=0 : EnregDess=0

;####################################################################### FIN PARAM PERSO ##########

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-#PasButton*2, Haut-#PasButton*5, $FFFFFF)
    StopDrawing()  
  EndIf
  NbDess=0
EndProcedure

Procedure ChxBrush()
  If OpenWindow(#Fenetre_ChxBrush, 0, 0, 400, 200, "#Title", #PB_Window_SystemMenu |  #PB_Window_MinimizeGadget )
    ButtonImageGadget(#GADGET_Brush1,  0, 0, 40,40,   ImageID(11),  #PB_Button_Toggle)
    ButtonImageGadget(#GADGET_Brush2,  40, 0,40,40, ImageID(12),  #PB_Button_Toggle)
    ButtonImageGadget(#GADGET_Brush3,  80, 0,40,40, ImageID(13),  #PB_Button_Toggle)
    ButtonImageGadget(#GADGET_Brush4,  120, 0,40,40, ImageID(14),  #PB_Button_Toggle)
    ButtonImageGadget(#GADGET_Brush5,  1600, 0,40,40, ImageID(15),  #PB_Button_Toggle)   
  EndIf         
EndProcedure

Procedure ChxLine()
EndProcedure

Procedure ChxObjet()
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
  TailleButtonX.l = 50
  TailleButtonY.l = (Haut-61)/#NbButton
EndIf        

; 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
          Circle(x, y, #Taille12, 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       
    EndSelect
    
    StopDrawing()
  EndIf

EndProcedure

UseJPEGImageDecoder()
UseJPEGImageEncoder()

;-Image boutons
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

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(12),  #PB_Button_Toggle)
  GadgetToolTip(#GADGET_Brush0,#Outil1)
  
  ButtonImageGadget(#GADGET_Line0,   2, #Pmmenu+TailleButtonY*3, TailleButtonX, TailleButtonY, ImageID(21),   #PB_Button_Toggle)
  GadgetToolTip(#GADGET_Line0,#Outil2)

  ButtonImageGadget(#GADGET_Box0,    2, #Pmmenu+TailleButtonY*4, TailleButtonX, TailleButtonY, ImageID(31),    #PB_Button_Toggle)
  GadgetToolTip(#GADGET_Box0, #Outil3)
    
  ButtonGadget(#GADGET_Fill,   2, #Pmmenu+TailleButtonY*5, TailleButtonX, TailleButtonY, "Remplir",   #PB_Button_Toggle)
         
  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 gadget    
          
          ;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
        
            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_Brush0, #GADGET_Line0, #GADGET_Box0, #GADGET_Fill;gère la sélection de l'outil
              ;ça ne sert à rien mais je laisse :)
              ;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
          ;-03 - Fermeture du programme
          Select WEvent 
            Case #Fenetre_Principale
              If NbDess<>0 And EnregDess=0 ;si document non enregistré va demander si on souhaite enregistrer le document
                Resultat = MessageRequester(#TitleMain , "L'image actuelle n'a pas été enregsitrée. Voulez-vous l'enregistrer?",  #PB_MessageRequester_YesNo) ; o=6 / n=7 
                If Resultat=6
                  SaveDessin()  
                EndIf
              EndIf
              End
              
            Case #Fenetre_ChxBrush
              CloseWindow(#Fenetre_ChxBrush)
              
          EndSelect 
          
      EndSelect  
    ForEver    
EndIf

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 13:21
par david
le code est super propre merci (c'est un peu comme si j'avais une chance de pouvoir me relire.... lol)
par contre ça fait a peu près les pb que j'avais quand j'avais essayé les procédures
-> le bouton n'efface pas
-> la sauvegarde ne fonctionne pas
par contre l'image se charge sans pb, c'est bizarre??

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 15:01
par falsam
Comme je l'ai dit, je n'ai pas toucher à l'histoire de ton code :) Mais je veux bien jeter un oeil.

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 15:18
par david
Ce qui est bizarre c'est que sur mon code initial, le bouton effacer et enregistrer ne posent pas de pb

Dans le code que tu as modifié ça plante alors que tout semble nickel. c'est comme si le passage en procédure lui fait perdre certaines valeurs...
j'avais fait des essais dans le même sens mais je n'ai jamais compris pourquoi ce qui marchait avant ne fonctionnait plus donc j'avais abandonné

Re: CanvasGadget Variation

Publié : mer. 16/avr./2014 15:32
par blendman
salut

N'hésitez pas dans vos codes à utiliser les ;{ ;}, ça permet de plier/déplier facilement

Sinon, Falsam, y'a une erreur dans ta correction ici.

La correction :

Code : Tout sélectionner

If GEvent=#GADGET_Brush0
     ChxBrush() ; MessageRequester("brush","")
EndIf
         
If GEvent=#GADGET_Line0
     ChxLine();MessageRequester("line","")
EndIf
         
If GEvent=#GADGET_Box0
     ChxObjet();MessageRequester("objet","")
EndIf
Sinon, pourquoi ne pas mettre un trackbargadget() pour la taille de ta brosse plutôt que ta fenêtre ?
Tu peux aussi utiliser un panelgadget pour y placer des outils pré-enregistrés.

EDIT pour ton bug, ça vient de là :
NbDess et EnregDess sont locaux, mets les en global

Code : Tout sélectionner

Global NbDess=0 : EnregDess=0
Et paf ça marche ^^

En gros, si tu utilises des variables à plusieurs endroits, y compris des procédures, il faut qu'elles soient globales (ou shared si elles ne sont utilisées que dans des procédures)