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

MFC Discussion :

[MFC] Aide à la conception d'un interface graphique pr robot


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut [MFC] Aide à la conception d'un interface graphique pr robot
    Bonjour,

    Dans le cadre de notre projet d'électricité, nous devos réaliser un interface graphique qui commande un robot. D'une part les commandes moteurs et d'autre part acquisition vidéo. Pour situer un peu, nous utilisons un PIC pour les moteurs via des duty cycle et un FPGA pour la compression vidéo. Le tout passe en WiFi gràce à une carte. Bref, mes idées sont les suivantes pr l'interface :

    - Commande moteur : avec un slider choix de trois position de vitesses différentes (ça j'ai su faire). Mais ensuite j'aimerai pouvoir avoir un espèce de curseur pour diriger le robot : du style une croix que je puisse contrôler depuis le clavier avec les flèche et aussi via la souris en appuyant vers l'avant du curseur, arrière, gauche, droite et un stop.

    Pouvez vous me dire et m'aider à réaliser ceci en Visual C++ avec les ressource et le Wizard. Peut-être devrais-je utiliser un contrôl ActiveX mais je ne les connais pas tous et en plus je ne sais pas les intégrer dans la Dialogu Box. C'est juste l'envirronnnement graphique qui me pose problème car je contrôle déjà mon robot mais seulement via le clavier et j'aimerais donc un SUPER support graphique. Aidez moi svp, c'est super ce projet et c'est passionnant.

    - Pour afficher la vidéo temps réel après décompression (Huffman etc...) comment reconstituer et afficher mes images à partir des pixels en flux continu.

    Si quelqu'un pouvait déjà répondre pour le curseur moteur, je m'occupe de ça pr l'instant et puis si ça marche je m'occuperai de l'affichage des images (et ça risque d'être chaud aussi !).

    Merci bcp bcp aux passionnés de l'info comme vous (pr aide tutoriel API windows, forum etc...). Moi c'est l'elec qui me passionne mais c cool de me tester au C++.

    [Pour utiliser les balises, merci de laisser le BBCode activé - Merci - netah_25]
      0  0

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Salut,
    Pour VC++ je pourrai pas t aider. J avais eu un projet dans le meme genre (sauf que le robot était connecté sur le port série d'un ordi; et le controle commande se faisait à distance via Internet sur Internet Explorer. Y avait une webcam sur le robot.
    Toute la gestion avait été faite avec Labview. Ca avait pas mal simplifié la prog pour l'interfacage.
    Demande à ton prof ce qu'il en pense.

    Bon voilà, je surveille le sujet et bonne chance.
    +
      0  0

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Nous ommes obligé de faire ça en C++ car c'est dans le cadre d'un cours mais bon le cours ne nous apprends pas la programmation, on doit l'apprendre par nous même. Je réitère donc ma demande et espère sincèrement que quelqu'un pourra m'aider pour se curseur de commande : voici ce que je vois une position avant, arrière, gauche, droite quand j'appiue surr les flèche du clavier et le bouton au milieru du curseur quand pas de touche enfoncée. Ou et comment puis-je trouver une ressource de ce genre ? HELP ! Quelqu'un sait-il comment faire un truc de ce style avec visual C++ et le Wizard ou activeX ?

    Merci bcp. Ca serait bien cool que quelqu'un de basé en info me file un coup de pouce ! A plus (j'espère)...
      0  0

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    pardon pour les balises, je viens de le voir !

    Merci
      0  0

  5. #5
    Membre du Club Avatar de benoitB
    Profil pro
    Inscrit en
    Août 2002
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 78
    Points : 68
    Points
    68
    Par défaut wifi ?
    Bonjour,
    Pour tout ce qui est pilotage externes via le port série je connais bien mais une carte wifi ???
    J'ai fait une appli qui contrôle un automate plein de moteurs et de discrets mais via le port série.
    Tu peux m'éclairer sur la carte wifi ?
      0  0

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Pour la carte WiFi on utilise les socket Windows pour établir des connexions TCP. Voilà, mais moi ce pr quoi j'aimerais qu'on m'aide est l'interface graphique avec le curseur !
      0  0

  7. #7
    Membre du Club Avatar de benoitB
    Profil pro
    Inscrit en
    Août 2002
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 78
    Points : 68
    Points
    68
    Par défaut utiliser une TrackBar
    ah, ben cela (pour moi) me parait le plus simple :

    UTILISER UNE TRACKBAR

    Simplement définir :
    1- une valeur MIN
    2- une valeur MAX
    3- un pas

    Lorsque l'utilisateur change le curseur il faut lire sa position, du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    position = MATrackBar->get_Value();
      0  0

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Salut,

    D'abord merci de ta réponse (elles sont rares...) !
    La trackbar me semble pas mal mais je ne sais pas gérer à la fois les controls avance/recule et tourne à gauche/droit. N'y a t'il rien de mieu adapter pour mon problème ? Les ActiveX où alors un slider (trackbar) qui va à la fois à gaucher/droite et en avant/arrière. Avec deux ça pourrait aller mais comment dire qu'ils font parti d'un block...
      0  0

  9. #9
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Salut,

    Est-ce que tu ne pourrais pas avoir une zone type zone de dessin (carré blanc) qui contient un repere centré, et une croix M au centre du repère (donc au milieu du carré blanc) ?

    Ensuite, la fait de déplacer cette croix au clavier (ou à la souris par drag&drop) te permet de déplacer ton robot (tu connais le vecteur OM, donc la direction qu'il est censé prendre)....

    Qu'en penses-tu ?
    Je ne sais pas si un tel contrôle existe déjà tout fait, mais ça ne doit pas être si compliqué à créer.


    bigquick
    And still we will be here, standing like statues ...
      0  0

  10. #10
    Membre du Club Avatar de benoitB
    Profil pro
    Inscrit en
    Août 2002
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 78
    Points : 68
    Points
    68
    Par défaut WindowsForm
    Pour les MFC je suis un peu embêté car mes applis sont des WindowsForms.

    Dans ton cas 2 TrackBar (1 verticale & 1 horizontale par exemple)
      0  0

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Les deux track bar, ça me semble pas idéal car je ne sais pas gérer les deux en même temps au clavier mais peut être avec 4 (ou 5 pr le stop) boutons normaux ? Pouvez vous m'aider à les gérer et aussi l'idée de la croix centrée ça à l'air cool mais comment faire pouvez vous m'indiquer comment !
      0  0

  12. #12
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Salut,

    Pour la croix centré, voilà ce que je peux te proposer:

    1. Créé une boite de dialogue, et place dessus un contrôle "Picture" (celui en haut à droite de la boite d'outils). Ensuite, va dans le Class Wizard (Ctrl+W), dans l'onglet Member Variables.

    2. Selectionne IDC_STATIC, puis "Add Variable". Ajoute une variable de type Control qui s'appelle m_Dessin.

    3. Ensuite, va dans le fichier C...Dlg.cpp (fichier source de ta boite de dialogue), et ajoute le code suivant au début de la méthode OnPaint() (qui est appelée pour dessiner ta boite de dialogue):

    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
    30
    31
    32
    void C...Dlg::OnPaint() 
    {
    // device context
    CPaintDC dc(&m_Dessin);
     
    // crayon noir
    CPen pen;
    pen.CreatePen(PS_SOLID,1,BLACK_PEN);
    dc.SelectObject(&pen);
     
    // recuperation des coordonnées de la zone de dessin
    CRect r;
    m_Dessin.GetWindowRect(&r);
     
    // infos sur la zone de dessin
    int largeur = r.right-r.left;
    int hauteur = r.bottom-r.top;
    int centreX = largeur/2.0;
    int centreY = hauteur/2.0;
     
    // le repere centré
    dc.MoveTo( centreX , 0 );
    dc.LineTo( centreX   , hauteur );
    dc.MoveTo( 0 , centreY	);
    dc.LineTo( largeur , centreY );
     
    // position de la "croix" (qui est en fait un rond ...)
    dc.Ellipse(centreX-10,centreY-10,centreX+10,centreY+10);
     
    ... 
    if (IsIconic())  << laisse le code déjà présent à la suite
    ...
    Et voilà, la ou tu avais placé ton controle "Picture", tu as un repère centré et une boule blanche au milieu de ce repère

    Par contre si quelqu'un pouvait prendre le relai, je ne sais pas trop comment rafraichir l'affichage d'une boite de dialogue... (pour quand on aura déplacé la boule blanche)


    Sinon, si c'est trop compliqué, un système de 5 boutons (avancer, reculer, gauche, droite, stop) pourra fonctionner aussi. C'est juste que cette solution la est plus visuelle
    And still we will be here, standing like statues ...
      0  0

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Je viens d'essayer avec le curseur plus boule blanche c'est cool ! Avant je testais avec un sys à 5 boutons mais ça marche pas trop car quand je fais flèche gauche, il va au bonton du dessus. Bref comment contrôler ça comme il faut ? Avec kbhit() et _getch() est-ce possible où y a t'il plus simple ? Sinon pour l'autre solution que tu m'as passé (merci) maintenant comment gérer les déplacements ?
      0  0

  14. #14
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Tout d'abord, pour simplifier les choses, on va stocker les données importantes au lieu de simplement les calculer.
    Donc dans C...Dlg.h, juste après HICON m_hIcon;, ajoute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	int m_Largeur;	// largeur de la zone de dessin
    	int m_Hauteur;	// sa longueur
     
    	CPoint m_Centre;	// la position du centre de la zone de dessin
    	CPoint m_Rond;		// la position courante du rond blanc
     
    	bool m_bButtonDown;	// est ce que le bouton de la souris est enfoncé
    Et du coup, il faut donner une valeur initiale a ces variables, en rajoutant le code
    suivant dans C...Dlg.cpp (juste après le commentaire "TODO: Add your specialized code here")
    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
     
    BOOL CTestDlg::OnInitDialog()
    {
    	... code existant ...
     
    	// recuperation des coordonnées de la zone de dessin
    	CRect r;
    	m_Dessin.GetWindowRect(&r);
     
    	// infos sur la zone de dessin
    	m_Largeur = r.right-r.left;
    	m_Hauteur = r.bottom-r.top;
    	m_Centre.x = m_Largeur/2;
    	m_Centre.y = m_Hauteur/2;
     
    	// le rond commence au centre
    	m_Rond = m_Centre;
     
    	... return TRUE déjà présent ...
    }
    Du coup le code dans OnPaint() est allégé, il se limite à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	// device context
    	CPaintDC dc(&m_Dessin);
     
    	// le repere centré
    	dc.MoveTo(m_Centre.x, 0);
    	dc.LineTo(m_Centre.x, m_Hauteur);
    	dc.MoveTo(0, m_Centre.y);
    	dc.LineTo(m_Largeur, m_Centre.y);
     
    	// afficher le rond blanc au bon endroit
    dc.Ellipse(m_Rond.x-10,m_Rond.y-10,m_Rond.x+10,m_Rond.y+10);
    Et enfin on peut s'occuper du déplacement. Tu créés une fonction qui va tester ce déplacement et le traiter (ici, typiquement, faire bouger le robot)


    Dans C...Dlg.h (à la suite des variables ajoutées toute à l'heure):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void TestDeplacementMire(CPoint point);

    Dans C...Dlg.cpp (à la fin du fichier):
    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
     
    void CTestDlg::TestDeplacementMire(CPoint point)
    {
    	// on récupere les coordonnées de la zone de dessin
    	CRect r;
    	m_Dessin.GetWindowRect(&r);
    	ScreenToClient(&r);
     
    	// on teste si la souris est dedans
    	if (   point.x > r.left+10 && point.x < r.right-10
    		&& point.y > r.top+10 && point.y < r.bottom-10 )
    	{
    		// calculer le nouvelle position du rond blanc
    		m_Rond.x = point.x - r.left;
    		m_Rond.y = point.y - r.top;
     
    		// re-dessiner la fenetre
    		// (a revoir -> marche pas très bien)
    		Invalidate(FALSE);
     
    		// les coordonnées du vecteur déplacement sont:
    		//
    		// ( m_RondX - m_CentreX ) / m_Largeur
    		// ( m_RondY - m_CentreY ) / m_Hauteur
    		//
    		// faire avancer/tourner le robot
    		// en fonction de ce vecteur
    	}
    }


    Et enfin, il n'y a plus qu'à appeler cette fonction quand l'utilisateur bouge la souris ou clique.
    Dans le Class-Wizard (Ctrl+W), vas dans "Message maps", et choisis "C...Dlg" dans la liste déroulante de droite.
    Dans la liste en dessous, vers le milieu, tu devrais trouver WM_LBUTTONDOWN, WM_LBUTTONUP et WM_MOUSEMOVE. Ajoute une fonction pour chacun de ces messages, et mets-y le code suivant:

    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
     
    void C...Dlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    	m_bButtonDown = true;	// le bouton a été enfoncé
    	TestDeplacementMire(point);	// et on teste le déplacement
     
    	CDialog::OnLButtonDown(nFlags, point);
    }
     
     
    void C...Dlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    	// si le bouton est enfoncé
    	if (m_bButtonDown)
    		TestDeplacementMire(point);	// on teste le déplacement
     
    	CDialog::OnMouseMove(nFlags, point);
    }
     
     
    void C...Dlg::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    	m_bButtonDown = false;	// le bouton n'est plus enfoncé
     
    	CDialog::OnLButtonUp(nFlags, point);
    }


    Et voilà, tu devrais obtenir quelquechose comme sur cette image...



    Si quelqu'un pouvait juste éclaircir le point "rafraichissement de la fenetre" ça serait sympa
    Parceque l'effet obtenu est plutôt spécial
    And still we will be here, standing like statues ...
      0  0

  15. #15
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Bah en fait j'ai trouvé une solution au problème de rafraichissement:

    Dans le OnPaint(), juste après la ligne CPaintDC dc(&m_Dessin); (la première ligne quoi), il faut rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	CRect r;
    	m_Dessin.GetWindowRect(&r);
    	ScreenToClient(&r);
    	dc.Rectangle(0,0,m_Largeur,m_Hauteur);
    Ce qui a pour effet d'effacer ce qui est déjà présent.
    Donc voilà, ça devrait fonctionner, tu n'as plus qu'à traiter ton vecteur déplacement pour faire bouger le robot...

    Donne moi des nouvelles
    And still we will be here, standing like statues ...
      0  0

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Avant tout ouawww tu es super doué et ensuite merci ! C'est cool maintenant je vais un peu regarder au veteur de mouvement. En fait, je n'ai besoin que de 5 positions : avence, recule, droite, gauche et stop. J'espère y arriver même si je vois pas du tout comment ?
      0  0

  17. #17
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Re

    C'est cool si tu as reussi à tout faire marcher.

    C'est simplement des choses qu'on apprend à faire (plus ou moins bien, je dis pas que c'est la meilleure méthode là) avec le temps. Dans l'autre sens, je suis incapable de faire bouger le moindre robot

    Donc avec ton vecteur mouvement, tu peux décider si le robot doit avancer, ou tourner, etc ... et l'intensité du mouvement. Par exemple, si le vecteur vaut (0.5,1), c'est qu'il faut tourner un peu à droite, et avancer le plus vite possible (1 est la valeur maximale).

    Maintenant, si tu n'as que 5 positions, il faut choisir une seule action en fonction du vecteur (dans mon exemple, ça sera avancer), sachant que tu peux toujours moduler son intensité.

    J'espère que c'est assez clair.
    Maintenant, si il y a juste 5 positions fixes (par exemple, avance, un point c'est tout, pas d'intensité possible), le système des 5 boutons est peut-être plus approprié que la repère ou le système de sliders...
    C'est à toi de voir
    And still we will be here, standing like statues ...
      0  0

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Je pense que le système de bouton est plus simple. Au fait est-ce que tu sais comment créer un slider dans un simple projet win 32 sans utilisé le AppWizard des projet MFC. SUr MSDN, c pas clair; Je suis perdu là dessu depuis 2h. Comment faire les chose simplement, je suis perdu (encore...).
      0  0

  19. #19
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Euh non aucune idée, mais je doute que ce soit plus simple que par les MFC (dont le but est quand meme de nous faciliter la vie)
    And still we will be here, standing like statues ...
      0  0

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Merci de ton aide, j'ai fait ça sur base d'un sys. de 5 boutons que j'active avec la souris. Mais comment puis-je également utiliser le clavier. Car quand j'appuie sur la flèche gauche, il va pas nécessairement à gauche mais en haut ou en bas ... Comment mieux gérer ça pour qu'une fois dans mon envirronement commandes robot mon clavier soit définit comme je le veux.

    Merci t'es sympa !

      0  0

Discussions similaires

  1. conception d'une interface graphique
    Par lucky31 dans le forum JBuilder
    Réponses: 11
    Dernier message: 04/06/2007, 05h48
  2. De l'aide pour interface graphiques en C
    Par rirou dans le forum C
    Réponses: 3
    Dernier message: 26/03/2007, 11h09
  3. Réponses: 2
    Dernier message: 09/03/2007, 15h15
  4. aide pour interface graphique
    Par youp_db dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 12/01/2007, 15h58

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