Page 3 sur 3

Re: Tab pour un alinéa dans EditorGadget

Publié : jeu. 07/févr./2013 15:08
par blendman
Mesa a écrit :
En fait, dans Openoffice, on peut régler la taille d'une tabulation. Et dès qu'on appuie sur tab, cela crée une tabulation de la taille désiré. Je voudrai pouvoir faire la même chose ^^.
Il y a quelque chose qui m'échappe car mon code fait exactement cela.
il manque le choix (taille du taquet), par exemple via un menu ou un inputrequester()
Par contre, est-ce que editorgadget est capable de gérer un jeu de taquets différents pour chaque paragraphes... ?
Ce n'est pas ce que je recherche ;).
Moi, le fait que tous les taquets soient idem pour les paragraphes me va, ce que je voudrais c'est juste pouvoir changer la taille de ce taquet, comme dans open office ^^

J'ai testé ce code, mais ça ne marche pas et en plus, ça bloque le problème (l'editorgadget). Je suppose que ce n'est pas la bonne technique, mais comment changer le taquet utilisé ?

Code : Tout sélectionner

text.settextex

#ST_SELECTION=2
text\flags=#ST_SELECTION
text\codepage=#CP_ACP

Texte.s="{\rtf\tab "

Procedure LOWORD(Value)
  ProcedureReturn Value & $FFFF
EndProcedure

Procedure HIWORD(Value)
  ProcedureReturn (Value >> 16) & $FFFF
EndProcedure

Procedure MAKELONG(low, high)
  ProcedureReturn low | (high<<16)
EndProcedure

Procedure.f initTaquetTab()
  Value=GetDialogBaseUnits_()
  baseunitX=LOWORD(Value)
  baseunitY=HIWORD(Value)
 
  ;The horizontal base unit returned by GetDialogBaseUnits is equal to the average
  ;width, in pixels, of the characters in the system font;
  ;the vertical base unit is equal To the height, in pixels, of the font.
 
  hdc = GetDC_(GetDesktopWindow_())
  If hdc
    Ecrdpihz.l  = GetDeviceCaps_(hdc, #LOGPIXELSX)
  EndIf
  ;   If hdc
  ;     Ecrdpivt.l = GetDeviceCaps_(hdc, #LOGPIXELSY)
  ;   EndIf
  ReleaseDC_(GetDesktopWindow_(), hdc)    
 
  ; 1 horizontal Dialog Template Unit = (DPI écran / 96 * baseunitX)/4
  ; 1 vertical Dialog Template Unit = (DPI écran / 96 * baseunitY)/8
  pixelX.f = (Ecrdpihz/96)*baseunitX/4
  ; pixelY.f = (Ecrdpihz/96)*baseunitX/8
  ProcedureReturn pixelX
EndProcedure

facteur.f=initTaquetTab() ; transforme un nombre de caractère en dialog template units

; Si ModeTabulation = 0 alors taquets de tabulation tous les 32 dialog template units
; Si ModeTabulation = 1 alors taquets de tabulation tous les "taquet1" dialog template units
; Si ModeTabulation > 1 alors x taquets de tabulation chacun à la distance "taquets(x)"

;ModeTabulation = 0
;ModeTabulation = 1
ModeTabulation = 5  ; 5 taquets de tabulation


Dim taquets(5)  ; 5 taquets de tabulation en nombre de caractères
taquets(0) = 5*facteur
taquets(1) = 10*facteur
taquets(2) = 15*facteur
taquets(3) = 20*facteur
taquets(4) = 25*facteur

taquet1=17 * facteur   ; 1 taquet de tabulation à 5 caractères

If OpenWindow(0,0,0,320,220,"Simulate Tab",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  EditorGadget (0,10,60,300,140)
  CreateImage(0,300,20)
  StartDrawing(ImageOutput(0))
  Box(0,0,300,20,#White)
  Line(0,10,300,1,0)
  For i=0 To 30
    Line(10*i,0,1,20,0)
  Next i
 
  StopDrawing()
  ImageGadget(1, 10, 40, 300, 20,ImageID(0))
 
  SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
  ;SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquet1)
  SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets())
  ;    ModeTabulation
  ;    The number of tab stops contained in the Array. If this parameter is zero,
  ;   @taquet1 parameter is ignored And Default tab stops are set at every 32 dialog
  ;    template units. If this parameter is 1, tab stops are set at every n dialog
  ;    template units, where n is the distance pointed To by the @taquet1 parameter.
  ;    If this parameter is greater than 1, @taquets() is a pointer To an Array of tab stops.
  ;     
  ;    @taquet1 ou @taquets()
  ;    A pointer To an Array of unsigned integers specifying the tab stops, in dialog
  ;    template units. If the ModeTabulation parameter is 1, this parameter is a pointer To an
  ;    unsigned integer containing the distance between all tab stops, in dialog template
  ;    units.
 
  AddGadgetItem(0, -1, "Texte$")
  CreateMenu(0,WindowID(0))
  MenuTitle("tabulation")
  MenuItem(0,"tab = 5")
  MenuItem(1,"tab = 7")
  MenuItem(2,"tab = 10")
  MenuItem(3,"tab = 20")
  
 
  Repeat
    EventID = WaitWindowEvent()
    Select EventID
      Case  #PB_Event_Gadget
        Select EventGadget
          Case 0
           
        EndSelect
       
      Case #WM_KEYDOWN
        If EventwParam()=9
          ; Simulation du Tab avec du tag Rich Edit
          SendMessage_(GadgetID(0), #EM_SETTEXTEX, text.settextex, @Texte)
        EndIf
        
      Case #PB_Event_Menu
        Select EventMenu()
          Case 0
            SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(1))
            
          Case 1    
            SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(2))

            
          Case 2
            SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(3))
            
          Case 3
            SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(4))

            
        EndSelect
        
        
      Case #WM_CLOSE
        Quit=1
       
    EndSelect
  Until Quit=1
EndIf 

Re: Tab pour un alinéa dans EditorGadget

Publié : jeu. 07/févr./2013 20:29
par nico
J'ai corrigé le code, le problème venait de là:
En effet plusieurs appels de cette fonction modifiait les attributs du Gadget (il ne faut jamais faire comme ça, oui je sais c'est moi qui l'ai posté :mrgreen: )

Code : Tout sélectionner

SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)-#WS_TABSTOP)
corrigé par ça (mais un seul appel à cette fonction suffit):

Code : Tout sélectionner

SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE) & ~#WS_TABSTOP)
et j'ai aussi rajouté ceci:

Code : Tout sélectionner

InvalidateRect_(...)

Code : Tout sélectionner

text.settextex

#ST_SELECTION=2
text\flags=#ST_SELECTION
text\codepage=#CP_ACP

Texte.s="{\rtf\tab "

Procedure LOWORD(Value)
  ProcedureReturn Value & $FFFF
EndProcedure

Procedure HIWORD(Value)
  ProcedureReturn (Value >> 16) & $FFFF
EndProcedure

Procedure MAKELONG(low, high)
  ProcedureReturn low | (high<<16)
EndProcedure

Procedure.f initTaquetTab()
  Value=GetDialogBaseUnits_()
  baseunitX=LOWORD(Value)
  baseunitY=HIWORD(Value)

  ;The horizontal base unit returned by GetDialogBaseUnits is equal to the average
  ;width, in pixels, of the characters in the system font;
  ;the vertical base unit is equal To the height, in pixels, of the font.

  hdc = GetDC_(GetDesktopWindow_())
  If hdc
    Ecrdpihz.l  = GetDeviceCaps_(hdc, #LOGPIXELSX)
  EndIf
  ;   If hdc
  ;     Ecrdpivt.l = GetDeviceCaps_(hdc, #LOGPIXELSY)
  ;   EndIf
  ReleaseDC_(GetDesktopWindow_(), hdc)    

  ; 1 horizontal Dialog Template Unit = (DPI écran / 96 * baseunitX)/4
  ; 1 vertical Dialog Template Unit = (DPI écran / 96 * baseunitY)/8
  pixelX.f = (Ecrdpihz/96)*baseunitX/4
  ; pixelY.f = (Ecrdpihz/96)*baseunitX/8
  ProcedureReturn pixelX
EndProcedure

facteur.f=initTaquetTab() ; transforme un nombre de caractère en dialog template units

; Si ModeTabulation = 0 alors taquets de tabulation tous les 32 dialog template units
; Si ModeTabulation = 1 alors taquets de tabulation tous les "taquet1" dialog template units
; Si ModeTabulation > 1 alors x taquets de tabulation chacun à la distance "taquets(x)"

;ModeTabulation = 0
;ModeTabulation = 1
ModeTabulation = 5  ; 5 taquets de tabulation


Dim taquets(5)  ; 5 taquets de tabulation en nombre de caractères
taquets(0) = 5*facteur
taquets(1) = 10*facteur
taquets(2) = 15*facteur
taquets(3) = 20*facteur
taquets(4) = 25*facteur

taquet1=17 * facteur   ; 1 taquet de tabulation à 5 caractères

If OpenWindow(0,0,0,320,220,"Simulate Tab",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  EditorGadget (0,10,60,300,140)
  CreateImage(0,300,20)
  StartDrawing(ImageOutput(0))
  Box(0,0,300,20,#White)
  Line(0,10,300,1,0)
  For i=0 To 30
    Line(10*i,0,1,20,0)
  Next i

  StopDrawing()
  ImageGadget(1, 10, 40, 300, 20,ImageID(0))

  ; Un seul appel suffit!
  SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE) & ~#WS_TABSTOP)
  ;SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquet1)
  SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(0))
  ;    ModeTabulation
  ;    The number of tab stops contained in the Array. If this parameter is zero,
  ;   @taquet1 parameter is ignored And Default tab stops are set at every 32 dialog
  ;    template units. If this parameter is 1, tab stops are set at every n dialog
  ;    template units, where n is the distance pointed To by the @taquet1 parameter.
  ;    If this parameter is greater than 1, @taquets() is a pointer To an Array of tab stops.
  ;     
  ;    @taquet1 ou @taquets()
  ;    A pointer To an Array of unsigned integers specifying the tab stops, in dialog
  ;    template units. If the ModeTabulation parameter is 1, this parameter is a pointer To an
  ;    unsigned integer containing the distance between all tab stops, in dialog template
  ;    units.

  AddGadgetItem(0, -1, "Texte$")
  CreateMenu(0,WindowID(0))
  MenuTitle("tabulation")
  MenuItem(0,"tab = 5")
  MenuItem(1,"tab = 7")
  MenuItem(2,"tab = 10")
  MenuItem(3,"tab = 20")
  

  Repeat
    EventID = WaitWindowEvent()
    Select EventID
      Case  #PB_Event_Gadget
        Select EventGadget
          Case 0
           
        EndSelect
       
      Case #WM_KEYDOWN
        If EventwParam()=9
          ; Simulation du Tab avec du tag Rich Edit
          ;SendMessage_(GadgetID(0), #EM_SETTEXTEX, text.settextex, @Texte)
        EndIf
        
      Case #PB_Event_Menu
        Select EventMenu()
          Case 0
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(1))
            InvalidateRect_(GadgetID(0), 0, 1)
            
          Case 1    
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(2))
            InvalidateRect_(GadgetID(0), 0, 1)
            
          Case 2
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(3))
            InvalidateRect_(GadgetID(0), 0, 1)
            
          Case 3
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(4))
            InvalidateRect_(GadgetID(0), 0, 1)
            
        EndSelect
        
        
      Case #WM_CLOSE
        Quit=1
       
    EndSelect
  Until Quit=1
EndIf

Re: Tab pour un alinéa dans EditorGadget

Publié : ven. 08/févr./2013 9:02
par Mesa
Excuse moi blendman d'être aussi scolaire, mais je voudrai être sûr qu'il n'y aie pas de confusion entre: la marge, le retrait, le retrait de première ligne, le taquet et la tabulation.

Voici une image d'open office:

Image

Tu me confirmes que tu penses bien au taquets de tabulation ?

Mesa.

Re: Tab pour un alinéa dans EditorGadget

Publié : ven. 08/févr./2013 11:03
par Backup
Ce qu'il veux c'est pouvoir faire ce que le code Scintilla que j'ai posté, Fait !

lorsqu'il parle de Tabulation , il ne parle pas de "Taquet"
il parle de "l'espace" qui est inséré apres appuis sur la touche TAB
(par defaut cet espace est fixé a 8*chr(32) )

cet espace peut être redimensionné , c'est ce que fait mon code Scintilla
et c'est ce qu'il veux obtenir avec Rich TEXT ...

vous allez pas polémiquer 15 jours la dessus 8O j’hallucine :lol:

Re: Tab pour un alinéa dans EditorGadget

Publié : ven. 08/févr./2013 12:30
par Mesa
IL NE PEUT PAS Y AVOIR DE TABULATION SANS TAQUET ! ! !

C'est la dernière fois que je le dis.

Mon p'tit dobro, la dernière fois tu as cru que je te prenais pour un con, mais si tu continues à ne pas lire mes posts et à me parler comme ça, ça va être le cas :twisted:

Ce code marche chez moi.

Code : Tout sélectionner

text.settextex

#ST_SELECTION=2
text\flags=#ST_SELECTION
text\codepage=#CP_ACP

Texte.s="{\rtf\tab "

Procedure LOWORD(Value)
  ProcedureReturn Value & $FFFF
EndProcedure

Procedure HIWORD(Value)
  ProcedureReturn (Value >> 16) & $FFFF
EndProcedure

Procedure MAKELONG(low, high)
  ProcedureReturn low | (high<<16)
EndProcedure

Procedure.f initTaquetTab()
  Value=GetDialogBaseUnits_()
  baseunitX=LOWORD(Value)
  baseunitY=HIWORD(Value)
  
  ;The horizontal base unit returned by GetDialogBaseUnits is equal to the average
  ;width, in pixels, of the characters in the system font;
  ;the vertical base unit is equal To the height, in pixels, of the font.
  
  hdc = GetDC_(GetDesktopWindow_())
  If hdc
    Ecrdpihz.l  = GetDeviceCaps_(hdc, #LOGPIXELSX)
  EndIf
  ;   If hdc
  ;     Ecrdpivt.l = GetDeviceCaps_(hdc, #LOGPIXELSY)
  ;   EndIf
  ReleaseDC_(GetDesktopWindow_(), hdc)    
  
  ; 1 horizontal Dialog Template Unit = (DPI écran / 96 * baseunitX)/4
  ; 1 vertical Dialog Template Unit = (DPI écran / 96 * baseunitY)/8
  pixelX.f = (Ecrdpihz/96)*baseunitX/4
  ; pixelY.f = (Ecrdpihz/96)*baseunitX/8
  ProcedureReturn pixelX
EndProcedure

facteur.f=initTaquetTab() ; transforme un nombre de caractère en dialog template units

; Si ModeTabulation = 0 alors taquets de tabulation tous les 32 dialog template units
; Si ModeTabulation = 1 alors taquets de tabulation tous les "taquet1" dialog template units
; Si ModeTabulation > 1 alors x taquets de tabulation chacun à la distance "taquets(x)"

;ModeTabulation = 0
ModeTabulation = 1
;ModeTabulation = 2  


taquet1=5 * facteur   ; 1 taquet de tabulation à 5 caractères

; Dim taquets(5)  ; 5 taquets de tabulation en nombre de caractères
; taquets(0) = 5*facteur
; taquets(1) = 10*facteur
; taquets(2) = 15*facteur
; taquets(3) = 20*facteur
; taquets(4) = 25*facteur



If OpenWindow(0,0,0,320,220,"Simulate Tab",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  EditorGadget (0,10,60,300,140)
  CreateImage(0,300,20)
  StartDrawing(ImageOutput(0))
  Box(0,0,300,20,#White)
  Line(0,10,300,1,0)
  For i=0 To 30
    Line(10*i,0,1,20,0)
  Next i
  
  StopDrawing()
  ImageGadget(1, 10, 40, 300, 20,ImageID(0))
  
  ; Un seul appel suffit!
  SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE) & ~#WS_TABSTOP)
  SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquet1)
  ;SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquets(0))
  ;    ModeTabulation
  ;    The number of tab stops contained in the Array. If this parameter is zero,
  ;   @taquet1 parameter is ignored And Default tab stops are set at every 32 dialog
  ;    template units. If this parameter is 1, tab stops are set at every n dialog
  ;    template units, where n is the distance pointed To by the @taquet1 parameter.
  ;    If this parameter is greater than 1, @taquets() is a pointer To an Array of tab stops.
  ;     
  ;    @taquet1 ou @taquets()
  ;    A pointer To an Array of unsigned integers specifying the tab stops, in dialog
  ;    template units. If the ModeTabulation parameter is 1, this parameter is a pointer To an
  ;    unsigned integer containing the distance between all tab stops, in dialog template
  ;    units.
  
  AddGadgetItem(0, -1, "Texte$")
  CreateMenu(0,WindowID(0))
  MenuTitle("tabulation")
  MenuItem(0,"tab = 5")
  MenuItem(1,"tab = 10")
  MenuItem(2,"tab = 20")
  MenuItem(3,"tab = 30")
  
  
  Repeat
    EventID = WaitWindowEvent()
    Select EventID
      Case  #PB_Event_Gadget
        Select EventGadget
          Case 0
            
        EndSelect
        
      Case #WM_KEYDOWN
        If EventwParam()=9
          ; Simulation du Tab avec du tag Rich Edit
          ;SendMessage_(GadgetID(0), #EM_SETTEXTEX, text.settextex, @Texte)
        EndIf
        
      Case #PB_Event_Menu
        Select EventMenu()
          Case 0
            taquet1=5 * facteur 
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquet1)
            InvalidateRect_(GadgetID(0), 0, 1)
            
          Case 1 
            taquet1=10 * facteur
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquet1)
            InvalidateRect_(GadgetID(0), 0, 1)
            
          Case 2
            taquet1=20 * facteur
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquet1)
            InvalidateRect_(GadgetID(0), 0, 1)
            
          Case 3
            taquet1=30 * facteur
            ; Debug PeekI(@taquet1)
            SendMessage_(GadgetID(0),#EM_SETTABSTOPS,ModeTabulation,@taquet1)
            InvalidateRect_(GadgetID(0), 0, 1)
            
        EndSelect
        
        
      Case #WM_CLOSE
        Quit=1
        
    EndSelect
  Until Quit=1
EndIf
Mesa.

Re: Tab pour un alinéa dans EditorGadget

Publié : ven. 08/févr./2013 15:27
par blendman
Mesa a écrit :Tu me confirmes que tu penses bien au taquets de tabulation ?
oui, je confirme que c'est bien ça ;)

Tu peux aussi trouver ce que je cherche dans openoffice :
menu format/paragraphe/tabulation : on retrouve la possibilités de créer de nouveaux taquets de tabulation et de choisir celui qu'on veut utiliser (pour le type "gauche", celui qui m'intéresse, soit celui dont on se sert pour placer cet espace avant les paragraphes, dans les livres ^^).

Je vais tester ton code

Dobro : d'ailleurs merci pour l'exemple sur Scintilla, ça pourrait m'être utile pour un autre projet ^^

Nico : merci pour ton code. Je vais regarder ça.

EDIT : vos deux codes fonctionnent nickel, merci beaucoup.
Je pense que vous pouvez les ajouter dans trick & Tips et même postez ça dans le forum anglais (et même dans le message où Freaks parle du richedit et où on trouve pas mal de code utile pour un éditeur de texte RTF ;))

Encore merci à tous :)

Re: Tab pour un alinéa dans EditorGadget

Publié : ven. 08/févr./2013 17:17
par Backup
Mesa a écrit :IL NE PEUT PAS Y AVOIR DE TABULATION SANS TAQUET ! ! !
sur une machine a Ecrire , ou un traitement de Text .. a la limite oui tu as raison !
je dirai plutôt, qu'il n'existe pas de taquet Sans Tabulations !!


mais ici , on parle programmation ....

un éditeur Gadget , est un Espace Vide qui attends du code Ascii !

ton Taquet, n'existe pas ! c'est simplement une représentation , dans les Traitement de text, histoire de visualiser a l'avance l'espace d'une Tabulation !
Représentation d'ailleurs Pompé sur le principe Mécanique des Vielles Machine a ecrire ...

une Tabulation en informatique c'est le code 9 !
ton taquet n'as pas de code ! donc ,informatiquement parlant , il n'existe pas !

parler de Taquet ici , n'as aucun sens !
a la rigueurs, tu t'adresses a une secrétaire, qui utilise Word, ou Writer , je comprendrai ....


en programmation ton Taquet c'est un Sprite , ou bien un Signe Distinctif qui va représenter ta Colonne Tabulée !
rien de plus ...


(on va peut etre arriver a se comprendre un jour ... :mrgreen: )

Re: Tab pour un alinéa dans EditorGadget

Publié : ven. 08/févr./2013 21:22
par G-Rom
Mesa a écrit :IL NE PEUT PAS Y AVOIR DE TABULATION SANS TAQUET ! ! !
Et tu peu prendre un taquet sans tabulation... :mrgreen:

==>[]



@Blendman , tu es en mode forage du forum ? j'ai cru un temps que aranoth revenais parmis les vivants du forum ;)

Re: Tab pour un alinéa dans EditorGadget

Publié : sam. 09/févr./2013 18:49
par blendman
G-Rom a écrit :@Blendman , tu es en mode forage du forum ? j'ai cru un temps que aranoth revenais parmis les vivants du forum ;)
^^ en fait, j'ai d'abord cherché un sujet qui trait des tabulations dans un gadget editor, et je me suis dit que j'aurai plus de résultats si je postai sur un sujet où certains avaient déjà répondu :mrgreen:

Re: Tab pour un alinéa dans EditorGadget

Publié : sam. 09/févr./2013 20:50
par Kwai chang caine
G-Rom a écrit :Et tu peu prendre un taquet sans tabulation... :mrgreen:
Moi.... j'suis encore et toujours fan de ton humour :lol: :lol: :lol: :lol: