IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Rediriger les messages d'erreur Delphi


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut Rediriger les messages d'erreur Delphi
    Bonjours a tous ,

    Comme le dit le titre , je cherche a intercepter les messages d'erreur de delphi
    durant l'excution du programme et les envoyer dans composant "texte".

    Par exemple: lors d'une conversion d'une chaine en entier et que cela déclenche une erreur je veux intercepter le message, le stoker et qu'il ne s'affiche pas pour l'utilisateur.

    merci a tous ..
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Tu dois tout simplement utiliser le mécanisme d'interception des exceptions, à savoir le fameux try... catch. Voir l'aide de Delphi pour plus de précisions sur la syntaxe exacte.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut re:bonjour
    ben oui Delphi comme d'autre langages d'ailleurs propose ça et heureusement bon un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Try
       StrtoInt(Chaine);
    Except
      ShowMessage('Erreur de convertion');
    End;
    sinon dans ton exemple tu peux travailler avec la fonction TryStrtoint(je crois j'ai pas delphi sous les mains) si c'est ok ben ok si c'est non tu affiche un message.
    voila
    Cordialement @+
    et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
    Langage: Pascal,OCaml,Delphi,c/c++.
    Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
    Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
    Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
    Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Salut

    Je suis complément d'accord pour les try ... et si le code était parfaitement fonctionnel tout irait bien, mais voila c'est pas le cas, je sais que ma démarche est plutôt triviale et que cela n'est qu'une solution provisoire en attendant de déterminer vraiment le problème.

    En fait j'ai des messages d'erreur qui apparaissent , qui ne sont pas du tout systématique et donc que je n'arrive pas a reproduire pour les corriger.
    De plus d'après l'utilisateur ces messages ne semblent pas influencer le fonctionnement du programme (oui je sais bizarre !!).

    Donc je voudrais éviter que ces messages apparaissent à l'utilisateur dans un 1er temps ( dans un 2eme il faudra bien trouver une solution a ce problème).

    Un autre exemple de message d'erreur :

    Quand l'utilisateur clique sur un bouton pour ouvrir une autre fenêtre, j'ai un message m'indiquant qu'il est impossible d'ouvrir cette nouvelle fiche et quand il ferme la boite de message d'erreur la fenêtre s'ouvre et le programme continu a fonctionner normalement !! et ceci aléatoirement avec n'importe quelle nouvelle fenêtre et n'importe 2 fois par jour ou bien plus du tout pendant 1 mois.

    bye
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  5. #5
    Membre du Club Avatar de papadrago
    Inscrit en
    Juillet 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    Comme le dit le titre , je cherche a intercepter les messages d'erreur de delphi
    durant l'excution du programme et les envoyer dans composant "texte".
    Il suffit de poser un TApplicationEvents sur la forme et définir l'événement OnException. Pour ma part, je fais quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    procedure TfmMain.ApplicationEvents1Exception(Sender: TObject;
      E: Exception);
    var
      s : string;
    begin
      s := '-- ' + DateTimeToStr (Now)
                 + CRLF + 'Version       = ' + AppVersion // à adapter
                 + CRLF + 'Exception     = ' + E.ClassName
                 + CRLF + 'Message       = ' + E.Message 
                 + CRLF + 'Address       = $' + IntToHex (Integer(ExceptAddr), 8)
                 + CRLF + 'ActiveForm    = ' + Screen.ActiveForm.Name
                 + CRLF + 'ActiveControl = ' + Screen.ActiveControl.Name
                 + CRLF + 'Code page     = ' + IntToStr (GetACP);
     
      Log (s) // qui append dans un fichier texte
    end;
    C'est tellement utile qu'il y a meme des composants payants (et bien plus complets) pour faire ça: voir madExcept.

  6. #6
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut re:bonjour
    Personnellement je ne vois pas du tout mais alors du tout à afficher des messages d'erreurs à l'utilisateur(l'utilisateur n'a pas besoin de voir tel ou tel erreur il n'en a rien à cirer ,l'application doit marcher point) plutôt qu'à les résoudre .
    à mon avis le Try Finally Except suffit généralement, on va pas utiliser Tapplicationevents juste pour traiter un cas d'erreur de conversion comme même .
    En fait j'ai des messages d'erreur qui apparaissent , qui ne sont pas du tout systématique et donc que je n'arrive pas a reproduire pour les corriger.
    De plus d'après l'utilisateur ces messages ne semblent pas influencer le fonctionnement du programme (oui je sais bizarre !!).
    ah pour cela il nous faut un peu de code pour voir un peu ce qu'il y a
    Cordialement @+
    et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
    Langage: Pascal,OCaml,Delphi,c/c++.
    Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
    Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
    Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
    Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    Quand l'utilisateur clique sur un bouton pour ouvrir une autre fenêtre, j'ai un message m'indiquant qu'il est impossible d'ouvrir cette nouvelle fiche et quand il ferme la boite de message d'erreur la fenêtre s'ouvre et le programme continu a fonctionner normalement !! et ceci aléatoirement avec n'importe quelle nouvelle fenêtre et n'importe 2 fois par jour ou bien plus du tout pendant 1 mois.
    Il y a donc bien quelque part dans le code un truc qui fait que selon l'enchainement des opérations menées par l'utilisateur, une fenêtre qui devrait apparaitre ne le fait pas.
    Code du bouton, siouplait...
    Masquer l'erreur est stupide puisque ne règle pas le problème.
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Re ..

    Il y a donc bien quelque part dans le code un truc qui fait que selon l'enchainement des opérations menées par l'utilisateur, une fenêtre qui devrait apparaitre ne le fait pas.
    Entièrement d'accord avec toi Jipété ( surtout que mon idée " stupide "arrange rien du tout) mais si ce client ne voyait plus ce message çà serait pas plus mal .

    Je suis arrive au même conclusions que toi pour les enchainements d'actions, j'ai donc demander a ce client d'essayer de les communiquer afin de faire les mêmes
    et en vain aussi ! ai je les bon enchainements.!!

    Il me dit aussi que çà semble arriver plus souvent quand il se déplace vite dans le programme " ouverture d'une fenêtre fermeture de cette fenêtre , réouverture d'une autre fenêtre..et ainsi de suite "

    autre cas peut être lié !
    Il arrive plus rarement que le programme plante carrément avec un message " ne peux pas dessiner sur le canvas ".

    je vous montre comment sont fait mes appels à mes forms au cas ou ! elle sont toutes faites sur la même base.

    code d'appel à une form qui se trouve dans des DLL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //------------------------------------------------------------------------------
    procedure TFPhoenix.BtTarage(Sender: TObject);
    begin      
           Exlancetare(' ','R',PtmaxMultiplexeur,EtatRack,EtatRack1,etatTare);
    end;
    //------------------------------------------------------------------------------
    code de création de mes forms, je teste si la fenêtre n'existe pas avant de la créer au cas ou !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    //-----------------------------------------------------------------------------
    function ExLanceTare(NomProg:Pchar;typeTarage:Pchar;NbpointMax:integer;MemoEtatRack:byte;Var MemoEtatRack1:byte;Var EtatTarage:boolean):integer;stdcall;
    begin
        result:=0;
        EtatRack:=MemoEtatRack;
        Tarage:=typeTarage;
     
        if assigned(Ftare) then
        begin
              Ftare.Release;
              Ftare:=nil;
        end;
     
        Ftare:=TFtare.create(application);
        try
            NombreDepointMux:=NbpointMax;
            Nomprogramme:=NomProg;
            FTare.Showmodal;
         finally
              Ftare.Release;
              Ftare:=nil;
         end;
         Exresetmux(StymuliActif);
         MemoEtatRack1:=EtatRack1;
         EtatTarage:=etatTare;
         result:=0;   
    end;
    //------------------------------------------------------------------------------
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Euh je ne suis pas sûr mais je crois qu'après un ShowModal, la fiche est détruite aussi l'appel à un Release juste derrière me semble problématique...
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  10. #10
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut re:bonjour
    remplace vite fait ton release avec un Free
    cordialement @+
    et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
    Langage: Pascal,OCaml,Delphi,c/c++.
    Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
    Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
    Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
    Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .

  11. #11
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Hum ... pour les form, il me semble qu'il est conseillé d'utiliser le Release plutôt qu'un Free, non?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  12. #12
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut re:bonjour
    ben le release attend que tous les composants ont fini leurs tâches pour détruire la fiche quand à free il appel directement le destructeur destroy.
    cordialement @+
    et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
    Langage: Pascal,OCaml,Delphi,c/c++.
    Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
    Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
    Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
    Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .

  13. #13
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Néanmoins je persistes à dire qu'après l'appel au ShowModal de sa fiche FTare, cette dernière est déjà détruite à ce moment là. Donc c'est l'appel au Release qui suit dans le finally qui provoque les violations d'accès puisque la fiche est déjà détruite à ce moment là.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  14. #14
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par Aka Guymelef Voir le message
    Néanmoins je persistes à dire qu'après l'appel au ShowModal de sa fiche FTare, cette dernière est déjà détruite à ce moment là. Donc c'est l'appel au Release qui suit dans le finally qui provoque les violations d'accès puisque la fiche est déjà détruite à ce moment là.
    Je ne suis pas d'accord, désolé.
    Au retour du ShowModal la fiche appelée est toujours belle et bien existante.

    Donc le Release à toute sa place.

    @+ Claudius

  15. #15
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Elle n'est pas détuite mais non-visible après un ShowModal.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  16. #16
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bon ok admettons mais cela ne résout pas le problème alors.

    Du coup est-ce que ça ne serait pas l'appel d'un ShowModal d'une fiche à l'intérieur d'une DLL qui pose problème ? Peut-être que l'appel à un ShowModal n'est pas soumis aux conditions normales et que le fait de se trouver dans une DLL perturbe le fonctionnement, qu'en pensez-vous ?

    Aussi dans ta méthode, tu fais appel à une autre "Exresetmux", on pourrait voir ce qu'il s'y passe également ?
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  17. #17
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Bon ok admettons mais cela ne résout pas le problème alors.
    En effet.

    Citation Envoyé par Aka Guymelef Voir le message
    Du coup est-ce que ça ne serait pas l'appel d'un ShowModal d'une fiche à l'intérieur d'une DLL qui pose problème ?
    Pour ma part lorsque j'utilise une fiche contenue dans une DLL, je transmet à la DLL, lors de l'appel de cette fiche, le Handle de l'application hôte. Ce qui donne globalement ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function AfficheDialogue(const AppHandle: HWND): Integer;
    begin
      Application.Handle := AppHandle;
     
      with TFormDialog.Create(nil) do
      begin
        try
          Result := ShowModal;
        finally
          Release;
        end;
      end;
    end;
    Ceci afin d'éviter qu'apparaisse un 2° bouton dans la barre de tâches.

    Citation Envoyé par Aka Guymelef Voir le message
    Aussi dans ta méthode, tu fais appel à une autre "Exresetmux", on pourrait voir ce qu'il s'y passe également ?
    +1

    @+ Claudius

  18. #18
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    re a tous ,

    Pour répondre a Aka Guymelef , le "ExresetMux" est une fonction qui se trouve dans une autre dll .

    J'ai environ une 40 éne de DLL et toutes sont gérées de manière identique et certaine encore plus simplement comme si dessous .. donc les instructions supplémentaires ne semblent pas êtres en cause.

    En fait des l'ouverture je teste que la fenêtre n'existe pas avant avec de l'ouvrir,et le cas échéant je la détruis avant de la créer !.. justement pour essayer de corriger mon problème.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    //-----------------------------------------------------------------------------
    function ExExemple:integer;stdcall;
    begin
        if assigned(Ftoto) then
        begin
              Ftoto.Release;
              Ftoto:=nil;
        end;
     
        Ftoto:=Ttoto.create(application);
        try
            Ftoto.Showmodal;
        finally
             Ftoto.Release;
             Ftoto:=nil;
        end;
        result:=0;   
    end;
    Par contre ce client me disait que cela semblait survenir lorsqu'il ouvrait bcp de fenêtres consécutivement, peut être que je sature la mémoire ?? y a t il un moyen de contrôler cela ?
    l'utilisation des mes "release" sont justement là pour détruire mes "forms' de mes DLL et donc bien libérer la mémoire.

    bye.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/04/2011, 15h26
  2. Gérer les messages d'erreurs dans delphi
    Par nakry dans le forum Débuter
    Réponses: 2
    Dernier message: 11/05/2010, 14h32
  3. Réponses: 6
    Dernier message: 21/05/2008, 19h16
  4. rediriger les Messages d'erreurs d'Ado
    Par helmis dans le forum Bases de données
    Réponses: 4
    Dernier message: 22/02/2006, 00h35
  5. Rediriger les messages d'erreur
    Par goblin dans le forum Langage
    Réponses: 3
    Dernier message: 25/12/2005, 20h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo