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

GTK+ avec C & C++ Discussion :

Utiliser des saisies


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut Utiliser des saisies
    Bonjour à tous ! Je suis débutant en C et j'ai un petit problème avec GTK...
    Je ne comprends pas comment réexploiter des données saisies par l'utilisateur dans des formulaires.
    Mon but est d'envoyer un mail à un utilisateur (smtp et tout le blabla). Pour le moment j'arrive à m'envoyer des mails. Mais je dois préciser dans le code source le destinataire, le message etc... Donc ce n'est pas dynamique.
    Je suis arrivé à faire de facon dynamique l'envoit du message. Mais je dois toujours préciser dans mon code le destinataire et celui qui envoit le message.

    Car je n'arrive pas à réexploitez c'que l'utilisateur a écrit dans le champs "TO:" je n'arrive que dans le message.

    (Je ne sais pas si je suis très claire T_T)

    Voila un morceau de monde code source !
    (je suis nul en anglais donc je pense que j'ai du mal traduire mes coms... Mais comme je dois le faire en anglais... Ben...)

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    void  NewMail()
    {
       GtkWidget *NewMailWindow = NULL; /* New Mail Window */
       GtkWidget *pVBox = NULL; /* Vertical Box */
       GtkWidget *pHBox = NULL;
       GtkWidget* pTextView = NULL;
       GtkWidget* pButton = NULL;
     
       GtkWidget *pEntry = NULL;
       GtkWidget *pLabel = NULL;
     
       NewMailWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // to create a complete window not a pop up window !
       gtk_window_set_title ( GTK_WINDOW(NewMailWindow), "New Mail"); // Title of the main Window
       gtk_window_set_default_size(GTK_WINDOW(NewMailWindow),800,600); // Size of the mail Window
       gtk_window_set_position(GTK_WINDOW(NewMailWindow),GTK_WIN_POS_CENTER); // Default position of the mail window
     
     
       	pVBox = gtk_vbox_new(FALSE, 5);
    	gtk_container_add(GTK_CONTAINER(NewMailWindow), pVBox);
     
        /*** To , Cc: , Cci and Object ***/
     
     
        /* Creation et insertion des elements contenus dans le premier GtkFrame */
        pLabel = gtk_label_new("To :");
        gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
        pEntry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pEntry, FALSE, FALSE, 0);
     
        pLabel = gtk_label_new("Cc :");
        gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
        pEntry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pEntry, FALSE, FALSE, 0);
     
        pLabel = gtk_label_new("Cci :");
        gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
        pEntry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pEntry, FALSE, FALSE, 0);
     
        pLabel = gtk_label_new("Object :");
        gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
        pEntry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pEntry, FALSE, FALSE, 0);
     
     
        /*** Where the user write his mail***/
    	pEntry = gtk_text_view_new();
    	gtk_box_pack_start(GTK_BOX(pVBox), pEntry, TRUE, TRUE, 0);
     
        /*** To send his mail ***/
    	pButton=gtk_button_new_with_label("Envoyer");
        gtk_box_pack_start(GTK_BOX(pVBox),pButton,FALSE,FALSE,0);
        g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(SendMail), (gpointer) pEntry);
     
    	gtk_widget_show_all(NewMailWindow); /* display all the mail box */
     
    	return EXIT_SUCCESS;
    }
    La fonction qui crée un fichier texte, execute l'envoit du mail (un autre.exe) qui prend en compte le fichier txt crée et après l'envoi du mail elle efface le fichier texte. (elle exploite le champ texte de mon mail mais je ne sais pas comment exploitez le champ to)

    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
    33
    34
    35
    36
    37
    38
     
    /*** Send a mail ***/
    void SendMail(GtkWidget *pWidget, gpointer *data)
    {
    	GtkWidget *pEntry;
    	GtkTextBuffer* pTextBuffer;
    	GtkTextIter iStart;
    	GtkTextIter iEnd;
    	gchar* sBuffer;
     
    	pEntry = GTK_WIDGET(data);
     
    	/* On recupere le buffer */
    	pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pEntry));
    	/* On recupere l'origine du buffer */
    	gtk_text_buffer_get_start_iter(pTextBuffer, &iStart);
    	/* On recupere la fin du buffer */
    	gtk_text_buffer_get_end_iter(pTextBuffer, &iEnd);
     
    	/* On copie le contenu du buffer dans une variable */
    	sBuffer = gtk_text_buffer_get_text(pTextBuffer, &iStart, &iEnd, TRUE);
     
     
        FILE* file = NULL;
     
        file = fopen("mail.txt", "w+");
        fprintf(file, "mail.blabla.com\n\n"
              "blabla@blabla.com\n"
              "blabla@blabla.com\n"
              "From: \"Ajite\" <blabla@blabla.com>\n"
              "To: \"blabla\" <blabla@blabla.com>\n"
              "Subject: Test smtp\n\n"
              "%s %s  ", sBuffer,sBuffer);
        fclose(file);
        system("mail.exe mail.txt");
        remove("mail.txt");
        return 0;
    }
    ps: je comprends pas tout c'que je fais mais comme cela marche T_T... Enfin presque...

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut et bienvenue sur les forums de developpez.com


    Il faut que tu déclares un pointeur par zone de saisie car vu qu'il faut que tu récupères le contenu de tes champs, il te faut garder une référence sur chacun de ces widgets ! J'ai vu que dans ton cas, tu possèdes qu'un seul pointeur (pEntry) pour "toutes" tes zones de saisies, ce qui n'est pas très pratique, une manipulation est possible mais c'est une pure perte de temps !

    Pour récupérer le texte contenu dans un GtkEntry, il faut utiliser la fonction gtk_entry_get_text
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Merci Frank.H de m'aider !

    J'ai fais comme tu m'as dis j'ai crée deux nouveaux pointeurs pour les champs to et message. J'ai donc tenté d'envoyer un mail avec ces deux valeurs (mais le champs to me renvoit la valeur "NULL". Je pense donc que c'est à cause de cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(SendMail), (gpointer) pMainMessage);
    Qui envoit juste mon pointeur MainMessage et pas mon pointeurs pTo. Je ne sais pas comment le rajouter si je remets une ',' il va y avoir un argument de trop !

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Met alors tes widgets dans une structure, structure dont tu passes alors l'adresse à la place de ton MainMessage !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    (rapelle je suis débutant T_T)
    Merci Frank, mais je suis vraiment désolé mais je ne vois pas c'que tu veux dire par

    Citation Envoyé par Frank.H
    tu passes alors l'adresse à la place de ton MainMessage !
    Structure j'l'ai vu rapidement en cours T_T donc si mes souvenirs sont exactes

    Je fais une structure que je nomme Test par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct test
    {
        GtkWidget *pTo;
        GtkWidget *pMainMessage;
    };
    Donc je mets mes deux pointeurs dedans.

    Après je vais garder mon pEntry et je vais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct Test pEntry
    pEntry.pTo = gtk_entry_new();
    gtk_box_pack_start(GTK_BOX(pVBox), pEntry.pTo, FALSE, FALSE, 0);
    Je fais la même pour le pMainMessage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pEntry.pMainMessage = gtk_text_view_new();
    gtk_box_pack_start(GTK_BOX(pVBox), pEntry.pMainMessage, TRUE, TRUE, 0);
    et donc si je ne me suis pas trompé (mais la j'y crois pas une seconde T_T) je dois envoyer l'adresse avec l'esperluette... Mais je mets quoi dedans T_T alors...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(SendMail), (gpointer) pMainMessage

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Tu y est presque, c'est bien ca Pour l'enregistrement de ton callback en passant l'adresse de ta structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(SendMail), (gpointer) & pEntry);
    Pour ta structure on peut faire mieux, en faisant un typedef dessus soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
        GtkWidget *pTo;
        GtkWidget *pMainMessage;
    }
    test;
    La déclaration suivante
    est donc à remplacer par:
    Dans ton callback tu récupère alors un pointeur sur la structure que tu as passée en argument:
    Je te suggère par ailleurs de choisir mieux le nom de ta structure car test n'est pas très évocateur

    Voilà
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Utiliser des données saisies comme nom d'objet
    Par Tchebichef dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/09/2014, 22h53
  2. Réponses: 3
    Dernier message: 10/09/2013, 12h27
  3. Réponses: 0
    Dernier message: 11/10/2010, 11h27
  4. Réponses: 1
    Dernier message: 12/12/2007, 10h35
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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