Page 1 sur 1

Quelque chose d'étrange avec VectorDrawing ???

Publié : sam. 26/févr./2022 18:07
par Shadow
Salut, regardez ce code, il est censé reproduire les boutons à l'identique, tous devrais être exactement pareil !
Et bien devinez quoi ?, et bien non, il sont TOUS DIFFERENT !!!

La question qui tue, c'est POURQUOI ?!

Que ce soit dans une boucle dans un StartVectorDrawing() et EndVectorDrawing()
Ou alors chacun dessiné séparément ou chacun à sont propre bloc StartVectorDrawing() et EndVectorDrawing()

Et bien ça change rien, ok, les deux font la même chose, mais alors pourquoi il sont différents ?
Le graphique du dégradé devrait être strictement identique pour tous les boutons, mais chose incroyable, NON !

POURQUOI ?!

Code : Tout sélectionner

  ;{ Enumération des Gadgets du programme à partir de 1.
  Enumeration 1
    #Window
    #CanvasGadget
  EndEnumeration
  ;}
  
  ; Structure pour les boutons sur le canevas.
  Structure Boutons
    X.i
    Y.i
    Largeur.i
    Hauteur.i
    Texte.s
    MouseOver.b
    MouseClick.b
  EndStructure
  
  Global Dim MesBoutons.Boutons(3) ; 4 Boutons

  ; Procédure qui contient des fonctions pour dessiner les boutons quand la souris est pas sur un bouton.
  Procedure ButtonNormal(X.i, Y.i, Width.i, Height.i, Texte$)
    AddPathBox(X.i + 5, Y.i + 5, Width.i - 10, Height.i - 10)
    VectorSourceColor(RGBA(150, 150, 150, 255))
    StrokePath(10, #PB_Path_RoundCorner)
    AddPathBox(X.i + 6, Y.i + 6, Width.i - 12, Height.i - 12)
    VectorSourceColor(RGBA(200, 200, 200, 255))
    StrokePath(10, #PB_Path_RoundCorner)
    VectorSourceLinearGradient(0, 0, 0, Height.i)
    VectorSourceGradientColor(RGBA(200, 200, 200, 255), 0.0)
    VectorSourceGradientColor(RGBA(230, 230, 230, 255), 0.50)
    VectorSourceGradientColor(RGBA(230, 230, 230, 255), 0.50)
    VectorSourceGradientColor(RGBA(200, 200, 200, 255), 1)
    AddPathBox(X.i + 2, Y.i + 2, Width.i - 4, Height.i - 4)
    FillPath()
  EndProcedure

  ; Création d'une fenêtre.
  If OpenWindow(#Window, 0, 0, 800, 600, "Exemple VectorDrawing...", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar) 
    WindowBounds(#Window, 800, 600, #PB_Ignore, #PB_Ignore) ; Dimensions Minimales et Maximales par défaut de la Fenêtre.
    
    ; Création d'un Canevas gadget.
    CanvasGadget(#CanvasGadget, 0, 0, 800, 600, #PB_Canvas_Keyboard)
    
    ; Largeur et Hauteur des boutons.
    MesBoutons.Boutons(0)\Largeur = 200
    MesBoutons.Boutons(0)\Hauteur = 50
    
    MesBoutons.Boutons(1)\Largeur = 200
    MesBoutons.Boutons(1)\Hauteur = 50
    
    MesBoutons.Boutons(2)\Largeur = 200
    MesBoutons.Boutons(2)\Hauteur = 50
    
    MesBoutons.Boutons(3)\Largeur = 200
    MesBoutons.Boutons(3)\Hauteur = 50
    
    ; Positionne les boutons pour les centrer sur le canevas.
    
    MesBoutons.Boutons(0)\X = ((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(0)\Largeur)) / 2
    MesBoutons.Boutons(0)\Y = (GadgetHeight(#CanvasGadget) - (MesBoutons.Boutons(0)\Hauteur + 5 + MesBoutons.Boutons(1)\Hauteur + 5 + MesBoutons.Boutons(2)\Hauteur + 5 + MesBoutons.Boutons(3)\Hauteur + 5)) / 2
    
    MesBoutons.Boutons(1)\X = ((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(1)\Largeur)) / 2
    MesBoutons.Boutons(1)\Y = MesBoutons.Boutons(0)\Y + MesBoutons.Boutons(0)\Hauteur + 5
    
    MesBoutons.Boutons(2)\X = ((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(2)\Largeur)) / 2
    MesBoutons.Boutons(2)\Y = MesBoutons.Boutons(1)\Y + MesBoutons.Boutons(1)\Hauteur + 5
    
    MesBoutons.Boutons(3)\X = ((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(3)\Largeur)) / 2
    MesBoutons.Boutons(3)\Y = MesBoutons.Boutons(2)\Y + MesBoutons.Boutons(2)\Hauteur + 5
    
    StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
    
    For Buttons.i = 0 To 3
      ButtonNormal(MesBoutons.Boutons(Buttons.i)\X, MesBoutons.Boutons(Buttons.i)\Y, MesBoutons.Boutons(Buttons.i)\Largeur, MesBoutons.Boutons(Buttons.i)\Hauteur, MesBoutons.Boutons(Buttons.i)\Texte)
    Next
    
    StopVectorDrawing()
    
    
;     StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
;       ButtonNormal(MesBoutons.Boutons(0)\X, MesBoutons.Boutons(0)\Y, MesBoutons.Boutons(0)\Largeur, MesBoutons.Boutons(0)\Hauteur, MesBoutons.Boutons(0)\Texte)
;     StopVectorDrawing()
;     
;     StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
;       ButtonNormal(MesBoutons.Boutons(1)\X, MesBoutons.Boutons(1)\Y, MesBoutons.Boutons(1)\Largeur, MesBoutons.Boutons(1)\Hauteur, MesBoutons.Boutons(1)\Texte)
;     StopVectorDrawing()
;     
;     StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
;       ButtonNormal(MesBoutons.Boutons(2)\X, MesBoutons.Boutons(2)\Y, MesBoutons.Boutons(2)\Largeur, MesBoutons.Boutons(2)\Hauteur, MesBoutons.Boutons(2)\Texte)
;     StopVectorDrawing()
;     
;     StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
;       ButtonNormal(MesBoutons.Boutons(3)\X, MesBoutons.Boutons(3)\Y, MesBoutons.Boutons(3)\Largeur, MesBoutons.Boutons(3)\Hauteur, MesBoutons.Boutons(3)\Texte)
;     StopVectorDrawing()
    
    
    ; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    
    ;{ Événements de la fenêtre.
    Repeat ; Départ des évènements de boucle.
      
      Select WaitWindowEvent(1) ; Cette ligne attend pendant (Minuteur) qu'un évènement soit reçu par la Fenêtre.
          
        Case #PB_Event_Gadget ; Un évènement s'est passé sur un gadget.
          
          Select EventGadget() ; Pour savoir sur quel gadget s'est produit l'évènement.
              
            Case #CanvasGadget
              
          EndSelect
          
        Case #PB_Event_SizeWindow ; La fenêtre a été redimensionné.
          
        Case #PB_Event_CloseWindow ; L'icône de fermeture de la fenêtre a été cliquée.
          End
          
      EndSelect
      
    ForEver
    
  EndIf
  ;}  
 
Voici une image ou j'ai étudié la chose, voici ce que j'en est conclue.
https://drive.google.com/file/d/1DHjsIY ... sp=sharing

Re: Quelque chose d'étrange avec VectorDrawing ???

Publié : sam. 26/févr./2022 22:10
par case

Code : Tout sélectionner

    VectorSourceLinearGradient(x,y,x,y+Height)
dis toi que la vectorSOURCElineargradient() defini le point de depart de ton degradé sur l'ensemble de la surface de dessin
que la hauteur (height) defini le nombre de lignes du degrade et qu'il se repete apres ce nombre de lignes.

j'ai ajoute un gros bouton devant les 4 autres j'ai limite la hauteur du degrade a 50 pixel (la taille de tes boutons)
tu verra que le degrade qui se repete tombe pile poil sur les degrades des autres boutons.
j'ai change les couleurs aussi pour que ce soit un peu plus visuel

Code : Tout sélectionner

  ;{ Enumération des Gadgets du programme à partir de 1.
  Enumeration 1
    #Window
    #CanvasGadget
  EndEnumeration
  ;}
  
  ; Structure pour les boutons sur le canevas.
  Structure Boutons
    X.i
    Y.i
    Largeur.i
    Hauteur.i
    Texte.s
    MouseOver.b
    MouseClick.b
  EndStructure
  
  Global Dim MesBoutons.Boutons(85) ; 4 Boutons

  ; Procédure qui contient des fonctions pour dessiner les boutons quand la souris est pas sur un bouton.
  Procedure ButtonNormal(X.i, Y.i, Width.i, Height.i, Texte$)
    
    AddPathBox(X.i + 5, Y.i + 5, Width.i - 10, Height.i - 10)
    VectorSourceColor(RGBA(0, 0, 0, 255))
    StrokePath(10, #PB_Path_RoundCorner)
    AddPathBox(X.i + 6, Y.i + 6, Width.i - 12, Height.i - 12)
    VectorSourceColor(RGBA(200, 200, 200, 255))
    StrokePath(10, #PB_Path_RoundCorner)
    VectorSourceLinearGradient(0, 0, 0, 50)   ; hauteur du degradé fixé a la taille des boutons ( 50 pixels dans ton exemple) pour afficher sur le gros bouton a quoi ressemble le degrade en fonction de la hauteur d'affichage
    ;  VectorSourceLinearGradient(x,y,x,y+Height)   ;correction du code a uncomment 
    VectorSourceGradientColor(RGBA(0, 255, 255, 255), 0.0)
    VectorSourceGradientColor(RGBA(0, 0, 255, 255), 0.50)
    VectorSourceGradientColor(RGBA(255, 0, 0, 255), 0.50)
    VectorSourceGradientColor(RGBA(0, 255, 0, 255), 1)
    AddPathBox(X.i + 2, Y.i + 2, Width.i - 4, Height.i - 4)
    FillPath()
  EndProcedure

  ; Création d'une fenêtre.
  If OpenWindow(#Window, 0, 0, 800, 600, "Exemple VectorDrawing...", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar) 
    WindowBounds(#Window, 800, 600, #PB_Ignore, #PB_Ignore) ; Dimensions Minimales et Maximales par défaut de la Fenêtre.
    
    ; Création d'un Canevas gadget.
    CanvasGadget(#CanvasGadget, 0, 0, 800, 600, #PB_Canvas_Keyboard)
    
    ; Largeur et Hauteur des boutons.
    MesBoutons.Boutons(0)\Largeur = 200
    MesBoutons.Boutons(0)\Hauteur = 50
    
    MesBoutons.Boutons(1)\Largeur = 200
    MesBoutons.Boutons(1)\Hauteur = 50
    
    MesBoutons.Boutons(2)\Largeur = 200
    MesBoutons.Boutons(2)\Hauteur = 50
    
    MesBoutons.Boutons(3)\Largeur = 200
    MesBoutons.Boutons(3)\Hauteur = 50
       
    MesBoutons.Boutons(4)\Largeur = 200
    MesBoutons.Boutons(4)\Hauteur = 400
    

    ; Positionne les boutons pour les centrer sur le canevas.
    
    MesBoutons.Boutons(0)\X = ((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(0)\Largeur)) / 2
    MesBoutons.Boutons(0)\Y = (GadgetHeight(#CanvasGadget) - (MesBoutons.Boutons(0)\Hauteur + 5 + MesBoutons.Boutons(1)\Hauteur + 5 + MesBoutons.Boutons(2)\Hauteur + 5 + MesBoutons.Boutons(3)\Hauteur + 5)) / 2
    
    MesBoutons.Boutons(1)\X = ((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(1)\Largeur)) / 2
    MesBoutons.Boutons(1)\Y = MesBoutons.Boutons(0)\Y + MesBoutons.Boutons(0)\Hauteur + 5
    
    MesBoutons.Boutons(2)\X = ((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(2)\Largeur)) / 2
    MesBoutons.Boutons(2)\Y = MesBoutons.Boutons(1)\Y + MesBoutons.Boutons(1)\Hauteur + 5
    
    MesBoutons.Boutons(3)\X = ((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(3)\Largeur)) / 2
    MesBoutons.Boutons(3)\Y = MesBoutons.Boutons(2)\Y + MesBoutons.Boutons(2)\Hauteur + 5
    
    MesBoutons.Boutons(4)\X = (((GadgetWidth(#CanvasGadget) - MesBoutons.Boutons(0)\Largeur)) / 2)-200
    MesBoutons.Boutons(4)\Y = (GadgetHeight(#CanvasGadget) - (MesBoutons.Boutons(0)\Hauteur + 5 + MesBoutons.Boutons(1)\Hauteur + 5 + MesBoutons.Boutons(2)\Hauteur + 5 + MesBoutons.Boutons(3)\Hauteur + 5)) / 2
    
    
    
    StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
    
    For Buttons.i = 0 To 4
      ButtonNormal(MesBoutons.Boutons(Buttons.i)\X, MesBoutons.Boutons(Buttons.i)\Y, MesBoutons.Boutons(Buttons.i)\Largeur, MesBoutons.Boutons(Buttons.i)\Hauteur, MesBoutons.Boutons(Buttons.i)\Texte)
    Next

    StopVectorDrawing()
    
    
;     StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
;       ButtonNormal(MesBoutons.Boutons(0)\X, MesBoutons.Boutons(0)\Y, MesBoutons.Boutons(0)\Largeur, MesBoutons.Boutons(0)\Hauteur, MesBoutons.Boutons(0)\Texte)
;     StopVectorDrawing()
;     
;     StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
;       ButtonNormal(MesBoutons.Boutons(1)\X, MesBoutons.Boutons(1)\Y, MesBoutons.Boutons(1)\Largeur, MesBoutons.Boutons(1)\Hauteur, MesBoutons.Boutons(1)\Texte)
;     StopVectorDrawing()
;     
;     StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
;       ButtonNormal(MesBoutons.Boutons(2)\X, MesBoutons.Boutons(2)\Y, MesBoutons.Boutons(2)\Largeur, MesBoutons.Boutons(2)\Hauteur, MesBoutons.Boutons(2)\Texte)
;     StopVectorDrawing()
;     
;     StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
;       ButtonNormal(MesBoutons.Boutons(3)\X, MesBoutons.Boutons(3)\Y, MesBoutons.Boutons(3)\Largeur, MesBoutons.Boutons(3)\Hauteur, MesBoutons.Boutons(3)\Texte)
;     StopVectorDrawing()
    
    
    ; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    
    ;{ Événements de la fenêtre.
    Repeat ; Départ des évènements de boucle.
      
      Select WaitWindowEvent(1) ; Cette ligne attend pendant (Minuteur) qu'un évènement soit reçu par la Fenêtre.
          
        Case #PB_Event_Gadget ; Un évènement s'est passé sur un gadget.
          
          Select EventGadget() ; Pour savoir sur quel gadget s'est produit l'évènement.
              
            Case #CanvasGadget
              
          EndSelect
          
        Case #PB_Event_SizeWindow ; La fenêtre a été redimensionné.
          
        Case #PB_Event_CloseWindow ; L'icône de fermeture de la fenêtre a été cliquée.
          End
          
      EndSelect
      
    ForEver
    
  EndIf
  ;}  
 

Re: Quelque chose d'étrange avec VectorDrawing ???

Publié : dim. 27/févr./2022 1:57
par Shadow
Merci Case,

Il y a une ligne de trop dans le dégradé, j'ai corrigé:

Code : Tout sélectionner

    AddPathBox(X.i + 5, Y.i + 5, Width.i - 10, Height.i - 10)
    VectorSourceColor(RGBA(0, 0, 0, 255))
    StrokePath(10, #PB_Path_RoundCorner)
    AddPathBox(X.i + 6, Y.i + 6, Width.i - 12, Height.i - 12)
    VectorSourceColor(RGBA(200, 200, 200, 255))
    StrokePath(10, #PB_Path_RoundCorner)
    VectorSourceLinearGradient(x,y,x,y+Height)
    VectorSourceGradientColor(RGBA(0, 255, 255, 255), 0.0)
    VectorSourceGradientColor(RGBA(255, 0, 0, 255), 0.50)
    VectorSourceGradientColor(RGBA(0, 255, 0, 255), 1)
    AddPathBox(X.i + 2, Y.i + 2, Width.i - 4, Height.i - 4)
    FillPath()

Re: Quelque chose d'étrange avec VectorDrawing ???

Publié : mar. 01/mars/2022 10:40
par blendman
Le dégradé avec vectordrawing commence en0,0 de ta surface de dessin par défaut (sauf si tu changes le système de coordonnées par exemple)

Donc, c'est logique que ton dégradé sur tes boutons ne démarre pas en haut du bouton.
ça se voit encore simplement si tu fait un dégradé sur son canvas et ensuite tu dessines tes boutons avec les mêmes propriétés que ce 1er dégradé (comme d'ailleurs l'a illustré Case).

avec ça dans ton code, c'est aussi bien visible :

Code : Tout sélectionner

 StartVectorDrawing(CanvasVectorOutput(#CanvasGadget))
    
    AddPathBox(O, O, GadgetWidth(#CanvasGadget), GadgetHeight(#CanvasGadget))
    VectorSourceLinearGradient(0, 0, 0, 50)   ; hauteur du degradé fixé a la taille des boutons ( 50 pixels dans ton exemple) pour afficher sur le gros bouton a quoi ressemble le degrade en fonction de la hauteur d'affichage
    ;  VectorSourceLinearGradient(x,y,x,y+Height)   ;correction du code a uncomment 
    VectorSourceGradientColor(RGBA(0, 255, 255, 255), 0.0)
    VectorSourceGradientColor(RGBA(0, 0, 255, 255), 0.50)
    VectorSourceGradientColor(RGBA(255, 0, 0, 255), 0.50)
    VectorSourceGradientColor(RGBA(0, 255, 0, 255), 1)
    FillPath()
    
    For Buttons.i = 0 To 4
      ButtonNormal(MesBoutons.Boutons(Buttons.i)\X, MesBoutons.Boutons(Buttons.i)\Y, MesBoutons.Boutons(Buttons.i)\Largeur, MesBoutons.Boutons(Buttons.i)\Hauteur, MesBoutons.Boutons(Buttons.i)\Texte)
    Next

    StopVectorDrawing()
Donc le résultat est comme c'est indiqué dans la doc, et est logique. Même si ce n'est pas ce qu'on voudrait ^^.
Toi, tu veux un dégradé sur chaque élément (ici des boutons), mais les coordonnées du dégradé de la lib vector sont basées sur le canvas.

Par contre, c'est vrai que ce serait bien de pouvoir définir le début d'un dégradé comme on veut (et pas en 0,0 du canvas), par exemple, pour le définir en 0,0 de chaque bouton.
ça doit être possible, je pense, mais j'ai pas le temps de chercher ^^.

Re: Quelque chose d'étrange avec VectorDrawing ???

Publié : mar. 01/mars/2022 17:05
par Shadow
Salut blendman,
Par contre, c'est vrai que ce serait bien de pouvoir définir le début d'un dégradé comme on veut (et pas en 0,0 du canvas), par exemple, pour le définir en 0,0 de chaque bouton.
ça doit être possible, je pense, mais j'ai pas le temps de chercher ^^.
C'est ce qu'a fait case justement !

En faite je partais du principe que le dégradé commençais à 0, 0 SUR MON BOUTON donc a partir du haut gauche.
Mais en réalité c'était pas du bouton mais du canevas !

Pour partir du bouton, tu renseigne donc ça position en X et Y.
C'est vraie que c'est logique en plus, mais bon moi chui passé à coté tu vois !

Pas si simple les dégradé, merci de ton passage !

Re: Quelque chose d'étrange avec VectorDrawing ???

Publié : mer. 02/mars/2022 10:13
par blendman
Shadow a écrit : mar. 01/mars/2022 17:05 C'est ce qu'a fait case justement !
J'ai testé le code de case, mais ça ne fonctionne pas, car aucun des boutons n'a le même dégradé, donc, ça ne démarre pas du 0,0 du bouton j'ai l'impression.

En plus, si on créé un dégradé sur le canvas, on voit bien qu,il est exactement comme sur les boutons.
Donc, ça ne fait pas ce que je recherche, c'est à dire créer le dégradé en 0,0 mais du bouton, pas du canvas.

Re: Quelque chose d'étrange avec VectorDrawing ???

Publié : mer. 02/mars/2022 13:22
par Shadow
Si si ça marche, c'est juste que tu n'as pas dû bien lire le code, il faut commenté la ligne:

Code : Tout sélectionner

VectorSourceLinearGradient(0, 0, 0, 50)
Et décommenté celle-ci:

Code : Tout sélectionner

;  VectorSourceLinearGradient(x,y,x,y+Height)   ;correction du code a uncomment 
La première par du haut gauche du canevas, le dégradé est sur 50 pixel de hauteur donc il se répète, normale.
Mais avec la seconde ligne alors c'est réglé, car tu commence du bouton et de la hauteur de celui-ci !

Re: Quelque chose d'étrange avec VectorDrawing ???

Publié : mer. 02/mars/2022 14:57
par blendman
ah oui, voilà, de base, le code ne fonctionnait pas, et non, je n'avais pas trop regardé en fait ^^.

Effectivement en commentant/décommentant les lignes nécessaires, ça fonctionne, c'est cool :).

Re: Quelque chose d'étrange avec VectorDrawing ???

Publié : mer. 02/mars/2022 15:27
par Shadow
Sans vouloir t'offenser ni personne, tu vois j'ai fais ce reproche ya pas longtemps...

Quand j'ai partagé mon module CanvasDrawingManager, ou j'avais tous documenté etc....
Mais les gents ne lisais pas, même un truc gros écris comme: AIDE ou INSTRUCTIONS.

Et donc j'ai pousser un petit coup de gueule en disant que c'était des codeurs bordel quoi pas des débiles, et que le minimum
c'était au moins de lire les instructions, comme sur une notice d'utilisation "que personne ne lis non plus d'ailleurs" ^^

C'est vraie quoi, ont se casse le cul à documenté le code et ils lisent même pas, c'est un peu normale que jme sois un peu
énervé, ya toujours un truc qui va pas même quand tu fais tous pour bien faire, jamais content !

Et certain ont pris la mouche, et bien qu'il la prenne, je m'en tape, c'est leur problème pas le mien !

Ici le rapport avec toi, c'est un peu pareil, mais différemment, c'est juste que tu n'as pas bien fais attention
et c'est pas grave, en faite c'est juste pour dire en gros, faites attention, lisez le code les amis !

C'est pas comme si les infos étais caché, moi, elle sont visibles et en début de fichier et en gros !
Ici toi tu à zappé ce petit truc, c'est pas grave, ça arrive à tous le mode ça !

C'est juste que quand je test un code, j'essaye de lire un minimum quand même
par respect pour celui qui à fait son truc et qui c'est cassé le cul à le faire avant de dire que le joujou il est cassé et qu'il marche pas !
Car après celui qui fais le programme peut se faire prendre pour un gros neuneu.... enfin bref.

Peut être que je l'es dis maladroitement, ça m'arrive souvent mais bon....
Bon, c'est vraie que pour KCC, j'ai été peu être un peu agressif, sans le vouloirs, c'est juste ça ma énerver car ya d'autre
qui m'ont aussi fais dis que mon code marchais pas.... c'est KCC qui a pris mais c'était pas porté sur lui spécialement mais sur la globalité...
Bon après j'ai revue tous ça quoi mais bon.... le mal étais fait quoi !

Pas facile de faire de sont mieux et que ce sois pas assez bien encore...