Mon Chrono

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Mon Chrono

Message par SpaceMan »

salut à tous !

Code : Tout sélectionner

;################################   ***** ***** ***** **** ***** **     * ***** **    **
;# Programme: Mon Chono         #   **    **  * **  * **   **    ** * * * **  * ** *  **
;# Auteur   : SpaceMan/Micko    #   ***** ***** ***** **   ***** **  *  * ***** **  * **
;# Démo     : Non               #      ** **    **  * **   **    **     * **  * **   ***
;# démarré le 12 Octobre 2007   #   ***** **    **  * **** ***** **     * **  * **    **
;################################
;je me suis amusé à faire un petit chrono la derniere ou j'ai été coupé du réseau mondial
; ouais c'est grave je sais mais j'en ai profiter pour écrire ce ptit programme et la 
;meilleure c'est que j'ai même fait une CallBack ;-)

Declare.s jour_semaine()

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #StatusBar_Window_0
EndEnumeration

Enumeration
  #Calendar_0
  #String_2
  #Text_3
  #Text_4
  #String_7
  #String_8
  #Button_9
  #Button_10
  #Button_11
  #Text_11
  #Text_12
  #Text_13
  #Text_14
  #CheckBox_12
EndEnumeration

Enumeration
  #Font_String_2
  #Font_Text_3
  #Font_Text_4
  #Font_String_7
  #Font_String_8
  #Font_Text_11
  #Font_Text_12
  #Font_Text_13
  #Font_Text_14
  #Film
EndEnumeration
Define.l Event, EventWindow, EventGadget, EventType, EventMenu

Global StatusBar.l, date,DateText$,ValJour,jour$

Procedure WinCallback(WindowID, Message, wParam, lParam)  
  Result.l = #PB_ProcessPureBasicEvents  
    If Message = #WM_SIZE  
      Select wParam  
        Case #SIZE_MINIMIZED:  
          MessageRequester("Mon chrono","Mon Chrono fonctionne! n'ayez aucune crainte",0)  
        Case #SIZE_RESTORED:  
          MessageRequester("Mon Chrono","Mon Chrono fonctionne toujours je vous l'avais !",0)
            
      EndSelect  
    EndIf  
  ProcedureReturn Result     
EndProcedure  
 


Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 506, 147, 178, 320, "Mon Chono", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
     ; | SetWindowLong_(WindowID(#Window_0), #GWL_EXSTYLE, GetWindowLong_(WindowID(#Window_0), #GWL_EXSTYLE) | #WS_EX_TOOLWINDOW)
     ; |la fonction ci-dessus fait partie des API et permet de donner une petite hauteur à la barre  
     ; | de titre avec un seul bouton pour la (Fermeture) de la fenêtre
    If CreateGadgetList(WindowID(#Window_0))
      CalendarGadget(#Calendar_0, 1, 1, 175, 155)
      TextGadget(#Text_3, 40, 170, 105, 15, "Date sélectionnée")
      TextGadget(#Text_4, 44, 222, 89, 15, "Heure d'alarme")
       StringGadget(#String_2, 5, 240, 30, 25, "",#PB_String_Numeric)
       StringGadget(#String_7, 68, 240, 30, 25, "",#PB_String_Numeric)
       StringGadget(#String_8, 132, 240, 30, 25, "",#PB_String_Numeric)
      SendMessage_(GadgetID(#String_2), #EM_LIMITTEXT, 2, 0);envoie un message pour limiter le nombre à 2 chiffres
      SendMessage_(GadgetID(#String_7), #EM_LIMITTEXT, 2, 0);pareil
      SendMessage_(GadgetID(#String_8), #EM_LIMITTEXT, 2, 0);pareil
      ButtonGadget(#Button_9, 1, 281, 50, 18, "Lancer")
      ButtonGadget(#Button_10, 126, 281, 51, 18, "Arreter")
      ButtonGadget(#Button_11, 63, 281, 51, 18, "Pause",#PB_Button_Toggle)
      TextGadget(#Text_11, 9, 185, 160, 25, "Un texte pas tres long", #PB_Text_Border|#PB_Text_Center)
      TextGadget(#Text_12, 36, 242, 15, 25, "H")
      TextGadget(#Text_13, 100, 242, 16, 25, "M")
      TextGadget(#Text_14, 165, 242, 15, 25, "S")
      
      SetGadgetText(#Text_11,jour_semaine()+" "+DateText$) ;permet d'afficher la date du jour ou celle sélectionnée dans le texte gadget
           
      SetGadgetFont(#String_2, LoadFont(#Font_String_2, "Arial", 11, 256))
      SetGadgetFont(#Text_3, LoadFont(#Font_Text_3, "Arial", 8, 256))
      SetGadgetFont(#Text_4, LoadFont(#Font_Text_4, "Arial", 8, 256))
      SetGadgetFont(#String_7, LoadFont(#Font_String_7, "Arial", 11, 256))
      SetGadgetFont(#String_8, LoadFont(#Font_String_8, "Arial", 11, 256))
      SetGadgetFont(#Text_11, LoadFont(#Font_Text_11, "Arial", 10, 256))
      SetGadgetFont(#Text_12, LoadFont(#Font_Text_12, "Arial", 14, 256))
      SetGadgetFont(#Text_13, LoadFont(#Font_Text_13, "Arial", 14, 256))
      SetGadgetFont(#Text_14, LoadFont(#Font_Text_14, "Arial", 14, 256))
      
      SetGadgetFont(#String_2, LoadFont(#Font_String_2, "Arial", 14, 256))
      SetGadgetFont(#String_7, LoadFont(#Font_String_7, "Arial", 14, 256))
      SetGadgetFont(#String_8, LoadFont(#Font_String_8, "Arial", 14, 256)) 
      
      SetGadgetColor(#Text_3,#PB_Gadget_FrontColor,RGB($0,$0,$DF))
      SetGadgetColor(#Text_4,#PB_Gadget_FrontColor,RGB($FF,$0,$0))
      SetGadgetColor(#String_2,#PB_Gadget_FrontColor,RGB($FF,$0,$0))
      SetGadgetColor(#String_7,#PB_Gadget_FrontColor,RGB($FF,$0,$0))
      SetGadgetColor(#String_8,#PB_Gadget_FrontColor,RGB($FF,$0,$0))
     EndIf
    
    StatusBar = CreateStatusBar(#StatusBar_Window_0, WindowID(#Window_0))
    AddStatusBarField(90)
    AddStatusBarField(90)
    StatusBarText(#StatusBar_Window_0, 1, FormatDate("%hh:%ii:%ss", Date()), #PB_StatusBar_Center)
    If CreateGadgetList(StatusBarID(#StatusBar_Window_0))
    CheckBoxGadget(#CheckBox_12,98, 3, 98, 16, "Réduire-moi")
    EndIf
  EndIf
EndProcedure

;ma procédure pour récupérer le jour de la semaine
Procedure.s jour_semaine()
  date = GetGadgetState(#Calendar_0)
  DateText$ = FormatDate("%dd/%mm/%yyyy",date)
  ValJour = DayOfWeek(date)
 If ValJour = 0
      jour$ = "Dimanche"
  ElseIf ValJour = 1
      jour$ =  "Lundi"
  ElseIf ValJour = 2
      jour$ = "Mardi"
  ElseIf ValJour = 3
      jour$ = "Mercredi"
  ElseIf ValJour = 4
      jour$ = "Jeudi"
  ElseIf ValJour = 5
      jour$ = "Vendredi"
    ElseIf ValJour = 6
      jour$ = "Samedi"
EndIf
    ProcedureReturn jour$
EndProcedure

Procedure jouer_Son() ;cette musique signale à l'utilisateur que son compte à rebours est à 0
NomFichier$ = "E:\Musique\ZOUK\Bela - Destino.mp3" ;changer le chemin par le votre
InitMovie()
LoadMovie(#Film, NomFichier$)
PlayMovie(#Film, WindowID(#Window_0))
EndProcedure


OpenWindow_Window_0() ;ouvre la fenetre mais elle est invisible
ShowWindow_(WindowID(#Window_0), #SW_SHOW);permet d'afficher la fenêtre qui au départ était invisible
SetWindowCallback(@WinCallback()); pour recuperer et gérer les évèments de l'application

Repeat
 If Event = #WM_TIMER
    ;Décompte
    sec - 1
    If sec < 0
      min - 1
        sec = 59
      If min < 0
        Heure - 1
         min = 59
        
        SetGadgetText(#String_2, Str(Heure)) ; Affichages des heures
      EndIf
      SetGadgetText(#String_7, Str(min))     ; Affichage des minutes
    EndIf    
   SetGadgetText(#String_8, Str(sec))        ; Affichage des secondes
  
  If Heure = 0 And min = 0 And sec =0
         MessageBeep_(#MB_ICONINFORMATION)
         jouer_Son()
         Delay(10000) ;joue la musique pendant 10 secondes
         End          ;puis arrete le programme
   EndIf
EndIf

  If StatusBar 
            FormatHeure$ = FormatDate("%hh:%ii:%ss", Date()) ;format de l'heure à utiliser
            If Heure$ <> FormatHeure$                      
                  Heure$ = FormatHeure$ 
                  StatusBarText(#StatusBar_Window_0, 0, Heure$, #PB_StatusBar_Center);affiche l'heure dans la barre de statue
            EndIf 
  EndIf

;pourquoi ici ?
; parceque le gadget appartient à la barre de statue et non directement à la fenetre
If GetGadgetState(#CheckBox_12) = 1: SetWindowState(#Window_0,#PB_Window_Minimize)
              SetGadgetState(#CheckBox_12,0)
EndIf


  Event = WindowEvent()

  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Calendar_0
        If  EventType() = #PB_EventType_LeftDoubleClick : EndIf
        SetGadgetText(#Text_11,jour_semaine()+" "+DateText$)
      
      ElseIf EventGadget = #String_2
      ElseIf EventGadget = #Text_3
      ElseIf EventGadget = #Text_4
      ElseIf EventGadget = #String_7
      ElseIf EventGadget = #String_8
      ElseIf EventGadget = #Button_9            ;bouton lancer
             Timer = SetTimer_(WindowID(#Window_0), 0,1000, 0)
             Heure = Val(GetGadgetText(#String_2))
             min = Val(GetGadgetText(#String_7))
             sec = Val(GetGadgetText(#String_8))
             
      ElseIf EventGadget = #Button_11           ; Pause  
       If KillTimer_(WindowID(#Window_0), 0)
        Timer = 0    
        Else 
       Timer = SetTimer_(WindowID(#Window_0), 0,1000, 0)
             Heure = Val(GetGadgetText(#String_2))
             min = Val(GetGadgetText(#String_7))
             sec = Val(GetGadgetText(#String_8))
       EndIf
       
      ElseIf EventGadget = #Button_10           ; arreter
        KillTimer_(WindowID(#Window_0), 0)
        ;Timer = 0
        SetGadgetText(#String_2,"00")
        SetGadgetText(#String_7,"00")
        SetGadgetText(#String_8,"00") ;:If IsMovie(#Film):StopMovie(#Film):Else:EndIf
           
      ElseIf EventGadget = #Text_11
      ElseIf EventGadget = #Text_12
      ElseIf EventGadget = #Text_13
      ElseIf EventGadget = #Text_14
      ElseIf EventGadget = #CheckBox_12
      EndIf
    Case #PB_Event_CloseWindow
      ;EventWindow = EventWindow()
      ;If  EventType() = #PB_EventType_LeftDoubleClick : EndIf
      ;SetWindowState(#Window_0,#PB_Window_Normal)
      If EventWindow = #Window_0
        CloseWindow(#Window_0);:If IsMovie(#Film):StopMovie(#Film):EndIf
        Break
      EndIf
  EndSelect
ForEver
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Il est "jouli" ce chrono.
J'irais meme jusqu'a dire qu'il est "top chrono" :D

Par contre le WindowEvent prenait noir de ressource sur ma bécane de bureau, alors je l'ai remplacé par WaitWindowEvent et c'est "top"

Merci pour ce code
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

Merci Kwai chang caine
t'es sur que l'horloge de la barre d'outil fonctionne bien avec la fonction WaitWindowEvent ? parce que chez moi ça marchait pas
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

merci spaceman , ton chrono est trop bon
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

Merci Bernard13 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

SpaceMan a écrit :Merci Kwai chang caine
t'es sur que l'horloge de la barre d'outil fonctionne bien avec la fonction WaitWindowEvent ? parce que chez moi ça marchait pas
toujours faire suivre un Delay(x) x--> de 1 a 20
apres un WindowEvent()
cela permet au prg de rendre la main a windows !! :)
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

c'est retenu cette fois-ci :D
grand maitre je t'ai envoyé un PM :wink:
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

Bonjour Grand Maître Dobro! (courbette, courbette, courbette)
Dobro a écrit :toujours faire suivre un Delay(x) x--> de 1 a 20
apres un WindowEvent()
cela permet au prg de rendre la main a windows !! :)
donc ça fait ça 8O

Code : Tout sélectionner

Event=WindowEvent()
Delay(1)
c'est pas mieux ça :D

Code : Tout sélectionner

Event=WaitWindowEvent(1)
Sans vouloir vous offenser Maitre Dobro :oops:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

RV a écrit : donc ça fait ça 8O

Code : Tout sélectionner

Event=WindowEvent()
Delay(1)
oui ! :)
c'est pas mieux ça :D

Code : Tout sélectionner

Event=WaitWindowEvent(1)
si mais quelques fois on doit avoir besoin de laisser notre application
tourner sans attendre qu'un evenement Windows soit appeler

exemple simple fait un Screen en fenetre ou l'on vois des Sprites-Flocons tomber , si tu utilise WaitWindowEvent , les Flocons ne tombe que si tu bouge la souris ....

test ligne 150 pour comprendre :)

Code : Tout sélectionner

 ; Star Field 
; programmé par le soldat inconnu
; purebasic 4.00


ProcedureDLL.l ColorLuminosity2(couleur, Echelle.f) ; Eclaicir ou foncer une couleur
    Protected rouge, vert, bleu
    
    rouge = Red(couleur) * Echelle
    vert = Green(couleur) * Echelle
    bleu = Blue(couleur) * Echelle
    
    If rouge > 255 : rouge = 255 : EndIf
    If vert > 255 : vert = 255 : EndIf
    If bleu > 255 : bleu = 255 : EndIf
    
    ProcedureReturn RGB(rouge, vert, bleu)
EndProcedure



Structure InfoEtoile
    x.l
    Y.l
    z.l
    couleur.l
EndStructure

NewList etoile.InfoEtoile()

#window=1


#Ecran_Largeur = 800
#Ecran_Hauteur = 600

#EffetPerspective = #Ecran_Largeur * 2 / 3


NbAjoutEtoile = 25
#ProfondeurDefautEtoile = 8
Vitesse = 21


; On ouvre l'openscreen
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
    MessageRequester("Erreur", "Impossible d'initialiser la souris ,le clavier ou l'écran. Vérifiez la présence de DirectX 7 ou supérieur.", 0)
    End
EndIf


If OpenWindow(#window,10,10,#Ecran_Largeur,#Ecran_Hauteur,"test",#PB_Window_SystemMenu) 
    if OpenWindowedScreen(windowID(#window),0,0,#Ecran_Largeur, #Ecran_Hauteur,1,1,1) = 0
        MessageRequester("Erreur", "Impossible d'ouvrir l'écran.", 0)
        End
    EndIf
EndIf


Repeat
    ClearScreen(RGB(0, 0, 0))
    
    ; On lit les évènements clavier et souris
    ExamineKeyboard()
    
    ; On crée des étoiles
    ResetList(etoile())
    For n = 1 To NbAjoutEtoile
        AddElement(etoile())
        etoile()\x = Random(#Ecran_Largeur * #ProfondeurDefautEtoile) - #Ecran_Largeur * #ProfondeurDefautEtoile / 2
        etoile()\Y = Random(#Ecran_Hauteur * #ProfondeurDefautEtoile) - #Ecran_Hauteur * #ProfondeurDefautEtoile / 2
        If etoile()\x = 0 Or etoile()\Y = 0
            DeleteElement(etoile())
        Else
            etoile()\couleur = $FCE8CB ; Bleu
            etoile()\z = #ProfondeurDefautEtoile * #EffetPerspective
        EndIf
    Next
    
    ; On déplace les étoiles
    StartDrawing(ScreenOutput()) 
    ResetList(etoile())
    While NextElement(etoile())
        etoile()\z - Vitesse
        Temp.f = #EffetPerspective / etoile()\z
        If etoile()\z <= 0 ; Si l'étoile est sorti de l'écran en Z
            DeleteElement(etoile())
        Else
            x2 = etoile()\x * Temp + #Ecran_Largeur / 2 ; Coordonnée de l'étoile
            y2 = etoile()\Y * Temp + #Ecran_Hauteur / 2
            If x2 <= 0 Or x2 >= #Ecran_Largeur - 1 Or y2 <= 0 Or y2 >= #Ecran_Hauteur - 1 ; Si on sort de l'écran, on supprime l'étoile
                DeleteElement(etoile())
            Else ; Sinon, on affiche l'étoile
                
                ; Centre
                Plot(x2, y2, ColorLuminosity2(etoile()\couleur, Temp * 1.5))
                If Temp > 0.2
                    ; Cotés
                    Temp * 0.4
                    Plot(x2 - 1, y2, ColorLuminosity2(etoile()\couleur, Temp))
                    Plot(x2, y2 - 1, ColorLuminosity2(etoile()\couleur, Temp))
                    Plot(x2 + 1, y2, ColorLuminosity2(etoile()\couleur, Temp))
                    Plot(x2, y2 + 1, ColorLuminosity2(etoile()\couleur, Temp))
                    ; Diagonales
                    Temp * 0.6
                    Plot(x2 - 1, y2 - 1, ColorLuminosity2(etoile()\couleur, Temp))
                    Plot(x2 + 1, y2 - 1, ColorLuminosity2(etoile()\couleur, Temp))
                    Plot(x2 - 1, y2 + 1, ColorLuminosity2(etoile()\couleur, Temp))
                    Plot(x2 + 1, y2 + 1, ColorLuminosity2(etoile()\couleur, Temp))
                EndIf
            EndIf
        EndIf
    Wend
    
    
    ; Calcul du FPS
    #DefinitionFPS = 20
    cpt + 1
    If cpt = #DefinitionFPS
        cpt = 0
        fps.f = #DefinitionFPS * 1000 / (ElapsedMilliseconds() - Temps)
        Temps = ElapsedMilliseconds()
    EndIf
    FrontColor(RGB(0, 0, 0))
    
    DrawText(0,5,"FPS = " + StrF(fps, 1)) 
    DrawText(0,20,"Etoiles = " + Str(CountList(etoile()))) 
    DrawText(0,35,"Vitesse = " + Str(Vitesse)) 
    DrawText(0,50,"Ajout = " + Str(NbAjoutEtoile)) 
    StopDrawing()
    
    FlipBuffers()
    
    If IsScreenActive() = 0
        End
    EndIf
    
    If KeyboardReleased(#PB_Key_Up)
        Vitesse + 5
    EndIf
    If KeyboardReleased(#PB_Key_Down) And Vitesse > 5
        Vitesse - 5
    EndIf
    If KeyboardReleased(#PB_Key_Right)
        NbAjoutEtoile + 5
    EndIf
    If KeyboardReleased(#PB_Key_Left) And NbAjoutEtoile > 1
        NbAjoutEtoile - 5
    EndIf
    ; ********************************************************* a tester *****************************
    WaitWindowEvent()  ; pas multitache !! 
    ;WindowEvent() ; multitache 
    ; delay(2)
    ; ****************************************************************************
    ExamineMouse() 
Until KeyboardPushed(#PB_Key_Escape) or MouseButton(#PB_MouseButton_Left)

Sans vouloir vous offenser Maitre Dobro :oops:
S'il vous plait arretez avec vos "Maitre" ... :?
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

Si je remplace

Code : Tout sélectionner

  WindowEvent() ; multitache 
  Delay(2) 
par ça

Code : Tout sélectionner

WaitWindowEvent(2)
ça marche! :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

RV a écrit :Si je remplace

Code : Tout sélectionner

  WindowEvent() ; multitache 
  Delay(2) 
par ça

Code : Tout sélectionner

WaitWindowEvent(2)
ça marche! :D
ha ouuuui !! c'est vrais que depuis la version 4 Fred a ajouté un Minuteur
a WaitWindowEvent() :roll: je l'avais oublié !! :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

S'il vous plait arretez avec vos "Maitre" ...
Alors là, c'est pas juste :?
ça fait plus d'un an que je retiens mes petits doigts boudinés d'écrire "Maitre DOBRO" et y'en a plein d'autres qui arrettent pas de le faire :? :lol:

En fait, je pense que c'est sincere, et si tu ne mérite peut etre pas entierement cette qualification (d'apres toi) , tu fais quand meme plus partie des maitres de ce temple, que des "padawans". :D

Mais il y a aussi Maitre FLYPE, Maitre DRI , Maitre GNOZAL, Maitre SOLDAT (il me manque :cry:), Maitresse LNA, Maitre DROOPY, Maitre CHRIS, Maitre TONTON, Maitre FLAITH, Maitre ERIX14, Maitre CPL.BATOR, Maitre ......etc ( l'ordre n'a pas d'importance evidemment :wink: )
Je m'excuse platement par avance de ceux que je n'ai pas cité :oops:
Mais y'en a encore plein d'autre....et c'est tant mieux :D
Sans parler du forum US....

Et puis en plus toi tu excelle dans la peinture, dans la musique, les arts martiaux, les connaissances.
Je pense que tu ne vole pas ton titre. 8)
Sauf quand tu t'énerve, un maitre doit etre toujours sage et posé :?
C'est pour ça entre autre, que je suis pas maitre, meme pas de moi-meme. :lol:

En plus je trouve que ça pete :

Maitre DOBRO :D

Bon alors puisque y'en a qui osent défier le courroux....
à bientot maitre :lol:
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

Dobro
--> ha ouuuui !! c'est vrais que depuis la version 4 Fred a ajouté un Minuteur
a WaitWindowEvent() 8O je l'avais oublié !! :lol:

moi je ne le savais meme pas :(
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

SpaceMan a écrit :Dobro
--> ha ouuuui !! c'est vrais que depuis la version 4 Fred a ajouté un Minuteur
a WaitWindowEvent() 8O je l'avais oublié !! :lol:

moi je ne le savais meme pas :(
:D :lol:
RV
Messages : 209
Inscription : sam. 18/nov./2006 15:16

Message par RV »

@Dobro
Dobro a écrit :ha ouuuui !! c'est vrais que depuis la version 4 Fred a ajouté un Minuteur
a WaitWindowEvent() :roll: je l'avais oublié !! :lol:
Y a gage la!? :) :D :lol: :twisted:

Tu es un as de la guitare :twisted: , alors je te mets à l'amande, tu dois jouer ceci! :wink:

http://fr.youtube.com/watch?v=JsHKoJM8uv8

[Edit] PS : c'est sûr, c'est pas du Chapi-Chapo :D :wink:
Répondre