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 :

Recupérer le contenu d'un GtkEntry vers un TextView


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut Recupérer le contenu d'un GtkEntry vers un TextView
    Bonjour je souhaiterai recuperer le texte saisi dans un GtkEntry pour l'afficher dans un TextView. Jusque là tout ce que j'ai essayer me fait planter mon appli dès que je lance l'envoi de la saisi vers le TextView.

    Voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     sNom = gtk_entry_get_text(GTK_ENTRY(pEntry));
         /*Création du buffer*/
                   pTextBuffer = gtk_text_buffer_new(NULL);
                   gtk_text_buffer_set_text(pTextBuffer, sNom,-1);
                   gtk_text_view_set_buffer(pTextView, pTextBuffer);
    si quelqu'un peut m'aider.Merci d'avances

  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 : 47
    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


    Le mieux serait de récupérer le buffer (au lieu d'en créer un nouveau) créé automatiquement lors de la création d'un GtkTextView, ce que tu peux faire avec la fonction gtk_text_view_get_buffer, tu remplis normalement le buffer comme tu l'as fait mais inutile dans ce cas d'affecter le buffer au widget

    Normalement cela devrait fonctionner !
    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
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Je viens de faire ce que tu m'as dis. Mais toujours pareil GTK.exe plante lors de l'appuie du bouton pour valider. Serait-ce parce que le formulaire se trouve sur un boite de dialogue?

  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 : 47
    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
    Moi mon code de test fonctionne très bien:
    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
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
    GtkWidget * p_entry = NULL;
    GtkWidget * p_text  = NULL;
    GtkWidget * p_btn   = NULL;
     
     
    static void cb (GtkWidget * p_wid, gpointer p_data)
    {
       GtkTextBuffer * p_buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (p_text));
       const gchar    * str   = gtk_entry_get_text (GTK_ENTRY (p_entry));
     
       gtk_text_buffer_set_text (p_buf, str, -1);
     
       (void) p_wid;
       (void) p_data;
    }
     
     
    int main (int argc, char ** argv)
    {
       GtkWidget * p_win    = NULL;
       GtkWidget * p_vbox   = NULL;
     
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new           (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_default_size      (GTK_WINDOW (p_win), 640, 480);
       gtk_container_set_border_width   (GTK_CONTAINER (p_win), 5);
       gtk_window_set_position          (GTK_WINDOW (p_win), GTK_WIN_POS_CENTER);
       g_signal_connect                 (p_win, "destroy", gtk_main_quit, NULL);
     
     
       p_vbox = gtk_vbox_new   (FALSE, 5);
       gtk_container_add       (GTK_CONTAINER (p_win), p_vbox);
     
     
       p_entry = gtk_entry_new ();
       p_text  = gtk_text_view_new ();
       p_btn   = gtk_button_new_with_label ("Envoyer...");
     
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry, TRUE, TRUE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_text, TRUE, TRUE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_btn, TRUE, TRUE, 0);
     
       g_signal_connect (G_OBJECT (p_btn), "clicked", G_CALLBACK (cb), NULL);
     
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return EXIT_SUCCESS;
    }
    Sinon montre ton code complet.
    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
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    je viens de tester ce que tu m'as filer. toujours pareil plantage de mon appli.
    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
    void OnUser(GtkWidget *widget,gpointer data,GtkWidget *pTextView)
    {
        GtkWidget* pBoite;
        GtkTextBuffer *pTextBuffer;
        GtkWidget* pEntry;
        GtkTextIter iStart, iEnd;
        gchar *sBuffer;
        gchar *sNom;
     
     
     
        /* Creation de la boite de dialogue */
        /* 1 bouton Valider */
        /* 1 bouton Annuler */
        pBoite = gtk_dialog_new_with_buttons("Saisie du nom",
            GTK_WINDOW(data),
            GTK_DIALOG_MODAL,
            GTK_STOCK_OK,GTK_RESPONSE_OK,
            GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,
            NULL);
     
        /* Creation de la zone de saisie */
        pEntry = gtk_entry_new();
        gtk_entry_set_text(GTK_ENTRY(pEntry), "Saisissez votre nom");
        /* Insertion de la zone de saisie dans la boite de dialogue */
        /* Rappel : paramètre 1 de gtk_box_pack_start de type GtkBox */
        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), pEntry, TRUE, FALSE, 0);
     
        /* Affichage des elements de la boite de dialogue */
        gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);
     
        /* On lance la boite de dialogue et on recupere la reponse */
        switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
        {
            /* L utilisateur valide */
            case GTK_RESPONSE_OK:
                   sNom = gtk_entry_get_text(GTK_ENTRY(pEntry));
         /*Création du buffer*/
                   pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
                   gtk_text_buffer_set_text(pTextBuffer, sNom,-1);
     
                break;
            /* L utilisateur annule */
            case GTK_RESPONSE_CANCEL:
            case GTK_RESPONSE_NONE:
            default:
     
     
     
     
     
     
                break;
        }
     
        /* Destruction de la boite de dialogue */
        gtk_widget_destroy(pBoite);
    }

  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 : 47
    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
    Ta fonction OnUser, c'est un callback (de quel widget si oui) ?

    Si c'est un callback du bouton que tu utilises pour valider la saisie .. c'est pas bon du tout ! Il faut que tu respect les signatures des signaux mis en place par GTK+ soit pour un bouton avec le signal "clicked" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void        user_function                  (GtkButton *button,
                                                gpointer   user_data)
    Tout comme le nom de la fonction, les noms des arguments peuvent êtres personnalisés mais il faut "toujours" respecter le type et le nombre des arguments !

    Ici tu utilises un troisième argument qui est pointeur sur un GtkTreeView or, celui-ci n'est jamais initialisé ! L'argument data de type gpointer dans les callback sert justement à ca, il faut donc que tu passes le pointeur de ton GtkTreeView à cet argument ce qui se fait durant l'enregsitrement du callback avec la fonction "g_signal_connect", c'est le dernier argument !
    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 !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pMenuItem = gtk_menu_item_new_with_label("New User");
    g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(OnUser), (GtkWidget*) pWindow);
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);

  8. #8
    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 : 47
    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
    Citation Envoyé par nh2_93
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pMenuItem = gtk_menu_item_new_with_label("New User");
    g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(OnUser), (GtkWidget*) pWindow);
    gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
    C'est le même topo, la signature d'un GtkMenuItem est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void        user_function                  (GtkMenuItem *menuitem,
                                                gpointer     user_data)
    Toi tu utilises un argument jamais initialisé .. d'ailleurs si tu règles bien ton compilateur il te dirais que quelque chose ne colle pas bien vu que tu ne respect pas la signature du signal ! Dans ton cas, inutile de passer en dernier argument de g_signal_connect ta fenêtre, passe simplement le pointeur vers ton GtkTextView puis récupère le dans ton callback de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GtkWidget * pTextView = data;
    Ca devrait le faire mais vire moi cet argument qui ne sert à rien !
    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 !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Maintenant je n'ai plus de crash de mon appli mais une fois que je valide rien ne s'affiche sur mon textView.
    Voila mon code maintenant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pMenuItem = gtk_menu_item_new_with_label("New User");
        g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(OnUser), (GtkTextView*) pTextView);
        gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
     
    	 pMenuItem = gtk_menu_item_new_with_label("Users Counts");
    	gtk_menu_shell_append(GTK_MENU_SHELL(pMenu),pMenuItem);
     
        pMenuItem = gtk_menu_item_new_with_label("Proprieties");
        gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);
    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 OnUser(GtkMenuItem* pMenuItem,gpointer data)
    {
        GtkWidget* pBoite;
        GtkTextBuffer *pTextBuffer;
        GtkWidget* pEntry;
        GtkTextIter iStart, iEnd;
        gchar *sBuffer;
        gchar *sNom;
     
     
     
        /* Creation de la boite de dialogue */
        /* 1 bouton Valider */
        /* 1 bouton Annuler */
        pBoite = gtk_dialog_new_with_buttons("Saisie du nom",
            GTK_WINDOW(data),
            GTK_DIALOG_MODAL,
            GTK_STOCK_OK,GTK_RESPONSE_OK,
            GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,
            NULL);
     
        /* Creation de la zone de saisie */
        pEntry = gtk_entry_new();
        gtk_entry_set_text(GTK_ENTRY(pEntry), "Saisissez votre nom");
        /* Insertion de la zone de saisie dans la boite de dialogue */
        /* Rappel : paramètre 1 de gtk_box_pack_start de type GtkBox */
        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), pEntry, TRUE, FALSE, 0);
     
        /* Affichage des elements de la boite de dialogue */
        gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);
     
        /* On lance la boite de dialogue et on recupere la reponse */
        switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
        {
            /* L utilisateur valide */
            case GTK_RESPONSE_OK:
                   sNom = gtk_entry_get_text(GTK_ENTRY(pEntry));
         /*Création du buffer*/
                   pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(data));
                   gtk_text_buffer_set_text(pTextBuffer, sNom,-1);
                   gtk_text_view_set_buffer(GTK_TEXT_VIEW(data),pTextBuffer);
     
                break;
            /* L utilisateur annule */
            case GTK_RESPONSE_CANCEL:
            case GTK_RESPONSE_NONE:
            default:
     
     
     
     
     
     
                break;
        }
     
        /* Destruction de la boite de dialogue */
        gtk_widget_destroy(pBoite);
    }

  10. #10
    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 : 47
    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
    Je viens de te donner une solution ... et tu n'écoutes pas, toi tu utilisers directement l'argument data
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(data));


    Citation Envoyé par Franck.H
    Dans ton cas, inutile de passer en dernier argument de g_signal_connect ta fenêtre, passe simplement le pointeur vers ton GtkTextView puis récupère le dans ton callback de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GtkWidget * pTextView = data;
    Ceci est à faire dans ton callback, tu peux le faire au début, y'a pas de problème, tout comme j'ai marqué, déclaration + initialisation et tu utilises ensuite ce pointeur "pTextView" !

    Fait également attention dans ta saisie, si tu entres des caractères avec accents et que tu ne convertis pas la chaîne en UTF8, ca n'affichera rien non plus !
    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 !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    au risque de te paraitre bete mais je ne comprend pas exactement ce que tu me demande de faire. j'ai essayer ca, mais ne marche toujours pas.

    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
    void OnUser(GtkMenuItem* pMenuItem,gpointer data)
    {
        GtkWidget* pBoite;
        GtkTextBuffer *pTextBuffer;
        GtkWidget* pEntry;
        GtkWidget* pTextView = data;
        gchar *sNom;
     
     
     
        /* Creation de la boite de dialogue */
        /* 1 bouton Valider */
        /* 1 bouton Annuler */
        pBoite = gtk_dialog_new_with_buttons("Saisie du nom",
            GTK_WINDOW(data),
            GTK_DIALOG_MODAL,
            GTK_STOCK_OK,GTK_RESPONSE_OK,
            GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,
            NULL);
     
        /* Creation de la zone de saisie */
        pEntry = gtk_entry_new();
        gtk_entry_set_text(GTK_ENTRY(pEntry), "Saisissez votre nom");
        /* Insertion de la zone de saisie dans la boite de dialogue */
        /* Rappel : paramètre 1 de gtk_box_pack_start de type GtkBox */
        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), pEntry, TRUE, FALSE, 0);
     
        /* Affichage des elements de la boite de dialogue */
        gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);
     
        /* On lance la boite de dialogue et on recupere la reponse */
        switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
        {
            /* L utilisateur valide */
            case GTK_RESPONSE_OK:
                   sNom = gtk_entry_get_text(GTK_ENTRY(pEntry));
         /*Création du buffer*/
                   pTextBuffer = gtk_text_view_get_buffer(data);
                   gtk_text_buffer_set_text(pTextBuffer, sNom,-1);
                   gtk_text_view_set_buffer(pTextView,pTextBuffer);
     
                break;
            /* L utilisateur annule */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        pMenuItem = gtk_menu_item_new_with_label("New User");
        g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(OnUser), pTextView);
        gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem);

  12. #12
    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 : 47
    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
    J'ai greffé ta fonction sur mon code de teste et je n'ai aucun 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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    #include <stdlib.h>
    #include <stdio.h>
    #include <gtk/gtk.h>
     
     
    static void cb (GtkWidget * p_wid, gpointer data)
    {
       GtkWidget      *  pBoite      = NULL;
       GtkTextBuffer  *  pTextBuffer = NULL;
       GtkWidget      *  pEntry      = NULL;
       GtkWidget      *  pTextView   = data;
       const gchar    *  sNom        = NULL;
     
     
     
       /* Creation de la boite de dialogue */
       /* 1 bouton Valider */
       /* 1 bouton Annuler */
       pBoite = gtk_dialog_new_with_buttons("Saisie du nom",
          NULL, /* - Franck.H - Ici plus de fenetre en parametre donc on met NULL. */
          GTK_DIALOG_MODAL,
          GTK_STOCK_OK,GTK_RESPONSE_OK,
          GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,
          NULL);
     
       /* Creation de la zone de saisie */
       pEntry = gtk_entry_new();
       gtk_entry_set_text(GTK_ENTRY(pEntry), "Saisissez votre nom");
       /* Insertion de la zone de saisie dans la boite de dialogue */
       /* Rappel : paramètre 1 de gtk_box_pack_start de type GtkBox */
       gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), pEntry, TRUE, FALSE, 0);
     
       /* Affichage des elements de la boite de dialogue */
       gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);
     
       /* On lance la boite de dialogue et on recupere la reponse */
       switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
       {
          /* L utilisateur valide */
          case GTK_RESPONSE_OK:
             sNom = gtk_entry_get_text(GTK_ENTRY(pEntry));
     
             /*Création du buffer*/
             /* - Franck.H - Ici oublie 2 fois d'utiliser la macro GTK_TEXT_VIEW. */
             pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (pTextView));
             gtk_text_buffer_set_text(pTextBuffer, sNom,-1);
             gtk_text_view_set_buffer(GTK_TEXT_VIEW (pTextView),pTextBuffer);
             break;
     
          /* L utilisateur annule */
          case GTK_RESPONSE_CANCEL:
          case GTK_RESPONSE_NONE:
          default:
             break;
       }
     
       /* Destruction de la boite de dialogue */
       gtk_widget_destroy(pBoite);
       (void) p_wid;
    }
     
     
    int main (int argc, char ** argv)
    {
       GtkWidget * p_win    = NULL;
       GtkWidget * p_vbox   = NULL;
       GtkWidget * p_btn    = NULL;
       GtkWidget * p_text   = NULL;
     
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new           (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_default_size      (GTK_WINDOW (p_win), 640, 480);
       gtk_container_set_border_width   (GTK_CONTAINER (p_win), 5);
       gtk_window_set_position          (GTK_WINDOW (p_win), GTK_WIN_POS_CENTER);
       g_signal_connect                 (p_win, "destroy", gtk_main_quit, NULL);
     
     
       p_vbox = gtk_vbox_new   (FALSE, 5);
       gtk_container_add       (GTK_CONTAINER (p_win), p_vbox);
     
     
       p_text  = gtk_text_view_new ();
       p_btn   = gtk_button_new_with_label ("Envoyer...");
     
       gtk_box_pack_start (GTK_BOX (p_vbox), p_text, TRUE, TRUE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_btn, TRUE, TRUE, 0);
     
       g_signal_connect (G_OBJECT (p_btn), "clicked", G_CALLBACK (cb), p_text);
     
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return EXIT_SUCCESS;
    }
    J'ai juste corrigé 2 ou 3 petites choses (c'était juste des warning mais bon...) mais à part ca, j'ai bien la saisie dans la GtkTextView !
    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 !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    J'ai fait tout ce que tu vien de faire. Mais rien n'y fait . Aprés la validation ca ne passe pas dans le TextView

  14. #14
    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 : 47
    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
    Citation Envoyé par nh2_93
    J'ai fait tout ce que tu vien de faire. Mais rien n'y fait . Aprés la validation ca ne passe pas dans le TextView
    As-tu testé directement mon exemple qui est un code complet et compilable ? Car si ca passe là, alors chez toi il y persiste un problème que je n'ai pas vu ou que tu n'as pas montré (sans le savoir bien entendu) !

    Test directement mon programme et s'il fonctionne correctement, donne moi ton code complet de ton programme que je le teste chez moi !
    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 !

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Oui j'ai testé ton code et il marche parfaitement. Donc le souci vien de mon code donc jte le file en entier.

  16. #16
    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 : 47
    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
    Bon, je commence un peu maintenant sans avoir vu tout ton code car tu as encore du pain sur la planche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pTextView=gtk_text_view_new_with_buffer(pTextBuffer);
    Non car tu n'as même pas créé de nouveau GtkTextBuffer au préalable, utilise alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pTextView=gtk_text_view_new();
    C'est d'une logique implaccable non ?!

    Comme je te l'ai déjà consillé dans ce même sujet, si tu as des fonctions qui font un traitement sur un widget comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_text_view_set_buffer(pTextView,pTextBuffer);
    qui attend, comme il se doit en premier argument, un argument de type GtkTextView, il faut utiliser la macro de transtypage fournit par chaque widget et qui commence par GTK_XXX (XXX étant le nom du widget) comme ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_text_view_set_buffer(GTK_TEXT_VIEW (pTextView),pTextBuffer);
    Là ca mérite un coup de parce que tu définit tes callback dans un header ! Si tu ne sais pas ce qu'est un header (fichier d'en-tête), reprend tes cours de C sur la partie "Programmation modulaire" car Ô grand jamais, on ne met de définition de fonction dans ce type de fichiers ! On y met les prototypes des fonctions, l'implémentation se fait dans un fichier du même nom mais avec l'extension *.c !


    Recherches en cours ...
    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 !

  17. #17
    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 : 47
    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
    Ok c'est bon j'ai trouvé ton erreur ! En fait tu passes le pointeur au callback avant même de créer le widget GtkTextView. Créé ton widget avant de la passer à ton callback puis ca devrait aller !
    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 !

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    je te remercie beaucoup. Ca marche niquel.

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

Discussions similaires

  1. Recupérer le contenu d'une comboBox
    Par M1000 dans le forum Flash
    Réponses: 1
    Dernier message: 17/05/2006, 10h41
  2. Réponses: 12
    Dernier message: 22/02/2006, 15h28
  3. [STRING]Contenu d'un String <> vers &lt; et &g
    Par TreizeSegments dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 03/08/2004, 08h37
  4. Copie du contenu d'un répertoire vers un autre
    Par IG88 dans le forum Windows
    Réponses: 4
    Dernier message: 30/07/2004, 14h33
  5. [MYSQL] Copier contenue d'une table vers...
    Par naseeb18 dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/04/2004, 13h40

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