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 :

enregistrer dans un fichier


Sujet :

GTK+ avec C & C++

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    j'ai encore un petit souci lié à ma structure je ne dois pas voir vraiment comment ca marche.
    Maintenat je l'ai compliqué un peu ainsi que ma fonction enregistrer:
    voci ma structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct
    {
      GtkWidget *textview1;
       GtkWidget *entry1;
       GtkWidget *comboboxentry1;
       GtkWidget *comboboxentry2;
       GtkWidget *comboboxentry3;
     
    }
    text_st;
    voici ma fonction enregistrer:
    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
     
    void on_button5_clicked(GtkButton *button,gpointer user_data)
     
    {
    /*déclaration des variables utiles pour récupérer la note*/
    GtkTextBuffer* text_buffer=0;
    GtkTextIter start;
    GtkTextIter end;
    const gchar *entrer;
    GtkWidget* pconfirmation;
    gchar* buffer;
    text_st    * p_st   = user_data;
    const gchar *jour;
    const gchar *mois;
    const gchar *annee;
     
    /*déclaration d'un pointeur de fichier mémo*/
    FILE *memo;  
     
     
    /*On récupére ce que l'utilisateur a rentré*/                                        
    entrer=gtk_entry_get_text(GTK_ENTRY(p_st->entry1));
    //On recupere le buffer et on le met dans une variable
    text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(p_st->textview1));
    //On recupere l'origine du buffer
    gtk_text_buffer_get_start_iter(text_buffer,&start);
    //On recupere la fin du buffer
    gtk_text_buffer_get_end_iter(text_buffer,&end);
    /*on copie le contenu du buffer dans une variable*/
    buffer = gtk_text_buffer_get_text(text_buffer, &start, &end, TRUE);
    /*récupéation du jour*/
    jour=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry1)->child));
    /*récupération du mois*/
    mois=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry2)->child));
    /*récupération de l'année*/
    annee=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry3)->child));
     
    /*ouverture du fichier memo en écriture */
       memo= fopen("calend.txt","a");
       if (memo==NULL) {
           perror("erreur d'ouverture du fichier");
           exit(0);
       }
    /*ouverture du fichier memo en écriture */
       memo= fopen("calend.txt","a");
       if (memo==NULL) {
           perror("erreur d'ouverture du fichier");
           exit(0);
       }
    fprintf(memo,"BEGIN:VEVENT\n"); 
    fprintf(memo,"SUMMARY:");  
    fprintf(memo,"%s\n",entrer);
    fprintf(memo,"DESCRIPTION:");
    fprintf(memo,"%s\n",buffer);
    fprintf(memo,"DTSTART:");
    fprintf(memo,"%s%s%sT00Z",annee,mois,jour);
    fclose(memo);
     
    //affichage d'une fenetre de confirmation d'enregistrement
    pconfirmation = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO ,GTK_BUTTONS_OK, "Votre memo a bien ete enregistre");
    gtk_dialog_run(GTK_DIALOG(pconfirmation));
    gtk_widget_destroy(pconfirmation);
    }
    jusque là je penses que tout va bien, il n'y a pas de problème
    mon problème vient d'un bouton qui fait référence à la comboboxentry1 et comboboxentry2
    voila ce que c'était avant que j'ai fais la structure:
    le callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    g_signal_connect (G_OBJECT (comboboxentry1), "changed",
                        G_CALLBACK (on_comboboxentry1_changed),
                        (gpointer) comboboxentry2);
    1/ maintenant qu'il y a la structure, comment faut il le mettre?
    comme ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    g_signal_connect (G_OBJECT (st->comboboxentry1), "changed",
                        G_CALLBACK (on_comboboxentry1_changed),
                        (gpointer) st);
    et voici les deux fonctions qui font référence à ces deux combobox avant la définition de la structure:

    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
     
    void combobox2_clear (GtkComboBox *p_combo_box)
    {
      GtkTreeModel *p_tree_model = NULL;
     
      g_return_if_fail (p_combo_box != NULL);
     
      p_tree_model = gtk_combo_box_get_model (p_combo_box);
      gtk_list_store_clear (GTK_LIST_STORE (p_tree_model));
    }
     
    void
    on_comboboxentry1_changed(GtkComboBox *combobox,gpointer user_data)
    {
      int value = 0;
      const gchar *text = NULL;  
      GtkComboBox * p_combo2 = user_data;
     
     
                                           /*récupération de la valeur dans la combobox1*/
      text=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (combobox)->child));
     
    /*on transcrit la chaine en un nombre*/
     value = (int) strtol (text, NULL,0);
     
    /* On efface le comboboxentry2 */
      combobox2_clear (p_combo2);
     
      if (value==31)
      {
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("janvier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("mars"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("mai"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("juillet"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("aout"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("octobre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("decembre"));
    }
           else
      {
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("janvier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("fevrier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("mars"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("avril"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("mai"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("juin"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("juillet"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("aout"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("septembre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("octobre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("novembre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_combo2), _("decembre"));      
    }
     
    }
    2/je suppose que dedans aussi ca change mais même question comment?


    j'avais eu l'idée de faire peut etre comme cela

    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
     
    void
    on_comboboxentry1_changed(GtkComboBox *combobox,gpointer user_data)
    {
      int value = 0;
      const gchar *text = NULL;
      text_st    * p_st   = user_data;
     
     
     
                                           /*récupération de la valeur dans la combobox1*/
        text=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry2)->child));
     
    /*on transcrit la chaine en un nombre*/
     
     value = (int) strtol (text, NULL,0);
     
    /* On efface le comboboxentry2 */
         combobox2_clear (p_st->comboboxentry2);
     
     
     
     
      if (value==31)
      {
              gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("janvier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mars"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mai"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juillet"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("aout"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("octobre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("decembre"));
    }
      else
      {
                gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("janvier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("fevrier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mars"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("avril"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mai"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juin"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juillet"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("aout"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("septembre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("octobre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("novembre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("decembre"));
     
    }
     
    }
    le problème c'est qu'il n'accepte pas ceci
    combobox2_clear (p_st->comboboxentry2);
    mais suis je sur la piste?
    je penses y etre presque mais il me faut encore de l'aide
    merci beaucoup

  2. #22
    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
    L'ensemble me semble correcte sauf à un détail près... ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    combobox2_clear (p_st->comboboxentry2);
    ta fonction combobox2_clear prend en paramètre un widget de type GtkComboBox et là tu lui en passe un de type GtkWidget donc (si ton widget est un GtkCombBoxEntry) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    combobox2_clear (GTK_COMBO_BOX_ENTRY (p_st->comboboxentry2));
    Toutes tes listes combo sont du même type ? Je veux des GtkComboBoxEntry ? Car dans ce cas, une seule fonction d'effacement suffit vu qu'ils contiennent touts de ce fait le même type de données et le même type de magasin de données !
    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. #23
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    ca ne marche pas, en effet je peux faire une seule fonction clear pour toutes mes comboboxentry et ca je pense que ca marche mais pour appeller la fonction ca ne lui va pas
    je te remets la fonction clear et la fonction qui l'apelle
    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
     
    void combobox_clear (GtkComboBox *p_combo_box)
    {
      GtkTreeModel *p_tree_model = NULL;
      GtkTreeIter    iter;
     
      g_return_if_fail (p_combo_box != NULL);
     
      p_tree_model = gtk_combo_box_get_model (p_combo_box);
     
     /* On recupere le GtkTreeIter de l'element courant. */
       if (gtk_combo_box_get_active_iter (p_combo_box, & iter))
       {
          /* On supprime l'element courant. */
          gtk_list_store_remove (GTK_LIST_STORE (p_tree_model), & iter);
     
          /* Il faut aussi vider la zone de texte. */
          gtk_entry_set_text (GTK_ENTRY (GTK_BIN (p_combo_box)->child), "");
       }
      gtk_list_store_clear (GTK_LIST_STORE (p_tree_model));
    }
     
     
    void
    on_comboboxentry1_changed(GtkComboBox *combobox,gpointer user_data)
    {
      int value = 0;
      const gchar *text = NULL;
      text_st    * p_st   = user_data;
     
     
     
     
                                           /*récupération de la valeur dans la combobox1*/
     
      text=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry2)->child));
     
    /*on transcrit la chaine en un nombre*/
     
     value = (int) strtol (text, NULL,0);
     
    /* On efface le comboboxentry2 */
     combobox_clear (GTK_COMBO_BOX_ENTRY (p_st->comboboxentry2));
     
     
     
      if (value==31)
      {
                 gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("janvier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mars"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mai"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juillet"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("aout"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("octobre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("decembre"));
    }
      else
      {
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("janvier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("fevrier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mars"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("avril"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mai"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juin"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juillet"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("aout"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("septembre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("octobre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("novembre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("decembre"));
     
    }
     
    }
    et voici le message d'erreur qu'il m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     C:\Documents and Settings\pepita\Projets\glade\projet2\src\callbacks.c In function `on_comboboxentry1_changed': 
    162 C:\Documents and Settings\pepita\Projets\glade\projet2\src\callbacks.c [Warning] passing arg 1 of `combobox_clear' from incompatible pointer type
    c'est le fait qu'on le déclare en GTK_COMBO_BOX_ENTRY qui ne lui va pas?
    merci

  4. #24
    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
    En fait ca viens du type de l'argument que prend ta fonction d'effacement, vu que tu as des GtkComboBoxEntry il faut changer la signature de la fonction soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void combobox_clear (GtkComboBoxEntry *p_combo_box)
    A moins que tu utilises l'autre macro pour le GtkComboBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    combobox2_clear (GTK_COMBO_BOX (p_st->comboboxentry2));
    Cela devrait éventuellement passer aussi mais tant qu'à faire, autant travailler directement avec le bon type
    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. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    j'ai essayé les deux solutions que tu me proposes mais rien marche en effet si je mets:
    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
     
    void combobox_clear (GtkComboBoxEntry *p_combo_box)
    {
      GtkTreeModel *p_tree_model = NULL;
      GtkTreeIter    iter;
     
      g_return_if_fail (p_combo_box != NULL);
     
      p_tree_model = gtk_combo_box_get_model (p_combo_box);
     
     /* On recupere le GtkTreeIter de l'element courant. */
       if (gtk_combo_box_get_active_iter (p_combo_box, & iter))
       {
          /* On supprime l'element courant. */
          gtk_list_store_remove (GTK_LIST_STORE (p_tree_model), & iter);
     
          /* Il faut aussi vider la zone de texte. */
          gtk_entry_set_text (GTK_ENTRY (GTK_BIN (p_combo_box)->child), "");
       }
      gtk_list_store_clear (GTK_LIST_STORE (p_tree_model));
    }
    il me mets que ce code ne lui va pas
    p_tree_model = gtk_combo_box_get_model (p_combo_box);

    du coup j'ai essayé plutot de mettre
    combobox_clear (GTK_COMBO_BOX (p_st->comboboxentry2));
    mais là il éxécute mais dès que je clique sur la combobx1 il bug
    en effet elles sont toutes défini comme des comboboxentry du coup je penses que c'est cela qui pose un problème

    la structure que j'ai défini pour pouvoir enregistrer me pose des soucis dans les autres fonctions, du coup j'ai essayé de trouver une autre solution pour éviter la structure pouvez vous me dire si c'est correcte de faire ca comme ca:
    je pense que ca me simplifierait car c'est moins compliqué que les structures
    voici la fonction enregistrer sans structure
    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
     
    void on_button5_clicked(GtkButton *button, gpointer data[2]){
     
    	GtkWidget *ptextview;
    	GtkEntry *pentry;
     
        ptextview=data[0];    
        pentry=data[1];
     
     
       const gchar *entrer=NULL;
     
     
     
     
    	GtkTextBuffer* text_buffer;
    	GtkTextIter start;
    	GtkTextIter end;
    	gchar* buffer;
     
     
    	FILE *memo;
     
     
     
     
        GtkWidget *perreur;
        GtkWidget* pconfirmation;
     
     
     
    entrer=gtk_entry_get_text(GTK_ENTRY(pentry));
    text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(ptextview));
    gtk_text_buffer_get_start_iter(text_buffer,&start);
    gtk_text_buffer_get_end_iter(text_buffer,&end);
    buffer = gtk_text_buffer_get_text(text_buffer, &start, &end, TRUE);
     
     
       memo= fopen("calend.txt","a");
       if (memo==NULL) {
           perror("erreur d'ouverture du fichier");
           exit(0);
       }
     
     
     fprintf(memo,"BEGIN:VEVENT\n"); 
    fprintf(memo,"SUMMARY:");  
    fprintf(memo,"%s\n",entrer);
    fprintf(memo,"DESCRIPTION:");
    fprintf(memo,"%s\n",buffer);
     
        pconfirmation = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_INFO ,GTK_BUTTONS_OK, "Votre memo a bien ete enregistre");
        gtk_dialog_run(GTK_DIALOG(pconfirmation));
        gtk_widget_destroy(pconfirmation);
    voici l'interface.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    enregistrer[0]=textview1;
     enregistrer[1]=entry1;                   
    g_signal_connect(G_OBJECT(button5),"clicked",G_CALLBACK(on_button5_clicked),(GtkWidget*)enregistrer);
    ceci me permettrait d'éviter la structure et serait plus simple je pense
    serait ce une solution correcte?
    La syntaxe du g signal connect est-elle bonne
    car je vous avoue que le parametre que j'ai mis me semble bizarre mais j'ai déjà fait ceci sous gtk et ca marchait sauf que j'avais
    void on_button5_clicked(GtkWidget*)enregistrer, gpointer data[2])

  6. #26
    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
    Non non et non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void on_button5_clicked(GtkButton *button, gpointer data[2])
    Je ne le répèterais jamais assez, il faut impérativement respecter les prototypes fixés par l'API sous peine d'avoir des problèmes de passage des arguments ! Le fait de rassembler des widgets dans une structure est une solution qui fonctionne à tous les coups à conditions de savoir le gérer correctement !
    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. #27
    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
    Testes voir 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
    15
    16
    17
    18
    19
    20
    21
    void combobox_clear (GtkComboBoxEntry *p_combo_box)
    {
       GtkTreeModel *p_tree_model = NULL;
       GtkTreeIter    iter;
     
       g_return_if_fail (p_combo_box != NULL);
     
       p_tree_model = gtk_combo_box_get_model (GTK_COMBO_BOX (p_combo_box));
     
       /* On recupere le GtkTreeIter de l'element courant. */
       if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (p_combo_box), & iter))
       {
          /* On supprime l'element courant. */
          gtk_list_store_remove (GTK_LIST_STORE (p_tree_model), & iter);
     
          /* Il faut aussi vider la zone de texte. */
          gtk_entry_set_text (GTK_ENTRY (GTK_BIN (p_combo_box)->child), "");
       }
     
       gtk_list_store_clear (GTK_LIST_STORE (p_tree_model));
    }
    Mais ca ne fonctionnera correctement que si tu passes tes arguments de façon correte ! Un seul problème de passage d'un pointeur ou d'une adresse et c'est la cata partout.
    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 !

  8. #28
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    je préférais faire comme ca car comme je te l ai dit les strutures je ne les maitrises pas du tout et en plus ca me fait changer toute mes fonctions c est sur qu avec moi ca va etre la cata car je me plante tout le temps dans mes arguments je trouvais que tableau de pointeurs etait plus simple, en fait nos rpofs nous a explique un peu comme ca amrchait c est pour ca que je prefererais utiliser un tableau de pointeur
    je vais essayer la solution que tu m as donner mais je me plante tout le temps quand je passe mes arguments
    merci

  9. #29
    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
    [QUOTE=pepsisterje vais essayer la solution que tu m as donner mais je me plante tout le temps quand je passe mes arguments
    merci[/QUOTE]
    Et bin alors apprend le C, si on connais son langage on ne se plante sur quelque chose d'aussi basique que le passage d'un simple pointeur ou d'une adresse à une fonction...

    C'est pourtant pas sorcier, voici un court exemple d'une structure dont l'adresse est passée en argument à une fonction:
    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
    #include <stdio.h>
    #include <stdlib.h>
     
     
    typedef struct
    {
       int age;
       char prenom [50];
    }
    my_st;
     
     
    static void show_infos (void * data)
    {
       if (data != NULL)
       {
          my_st * p_st = data;
     
          printf ("%s : %d ans\n", p_st->prenom, p_st->age);
       }
    }
     
     
    int main (void)
    {
       my_st st = { 29, "Franck.H" };
     
     
       show_infos ((void *) & st);
       return EXIT_SUCCESS;
    }
    J'ai gardé un pointeur de type void* pour l'argument de la fonction pour que tu vois le mécanisme qui est identique à GTK+ en fait ! Il faut lire de toute urgence des cours supplémentaires car ceci fait vraiment parti des bases du C, langage qui ne se programme pas au hasard ! Tu as l'embarat du choix sur la page C de developpez.com : http://c.developpez.com/cours/#cours-c
    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 !

  10. #30
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    je penses mieux comprendre maintenant les structures, mais quand il me marque pas de messages d'erreur j'avoue que je ne trouve pas mon erreur. Il exécute mais même problème dès que je sélectionne un nombre dans la comboboxentry1 il efface tout.
    Je te remets tout mon code.
    Voici le callback.c
    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
     
    void combobox_clear (GtkComboBoxEntry *p_combo_box)
    {
       GtkTreeModel *p_tree_model = NULL;
       GtkTreeIter    iter;
     
       g_return_if_fail (p_combo_box != NULL);
     
       p_tree_model = gtk_combo_box_get_model (GTK_COMBO_BOX (p_combo_box));
     
       /* On recupere le GtkTreeIter de l'element courant. */
       if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (p_combo_box), & iter))
       {
          /* On supprime l'element courant. */
          gtk_list_store_remove (GTK_LIST_STORE (p_tree_model), & iter);
     
          /* Il faut aussi vider la zone de texte. */
          gtk_entry_set_text (GTK_ENTRY (GTK_BIN (p_combo_box)->child), "");
       }
     
       gtk_list_store_clear (GTK_LIST_STORE (p_tree_model));
    }
     
     
     
     
    void
    on_comboboxentry1_changed(GtkComboBox *combobox,gpointer user_data)
    {
      int value = 0;
      const gchar *text = NULL;
      text_st    * p_st   = user_data;
     
     
     
     
                                           /*récupération de la valeur dans la combobox1*/
     
      text=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry2)->child));
     
    /*on transcrit la chaine en un nombre*/
     
     value = (int) strtol (text, NULL,0);
     
    /* On efface le comboboxentry2 */
     combobox_clear (GTK_COMBO_BOX_ENTRY (p_st->comboboxentry2));
      //combobox_clear (GTK_COMBO_BOX (p_st->comboboxentry2));
     
     
      if (value==31)
      {
     
           gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("janvier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mars"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mai"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juillet"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("aout"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("octobre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("decembre"));
    }
      else
      {
     
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("janvier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("fevrier"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mars"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("avril"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("mai"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juin"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("juillet"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("aout"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("septembre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("octobre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("novembre"));
          gtk_combo_box_append_text (GTK_COMBO_BOX (p_st->comboboxentry2), _("decembre"));
     
    }
     
    }
    voici l'interface.c
    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
     
    GtkWidget*
    create_window1 (text_st *st)
    st->comboboxentry1 = gtk_combo_box_entry_new_text ();
      gtk_widget_show (st->comboboxentry1);
      gtk_box_pack_end (GTK_BOX (vbox4), st->comboboxentry1, FALSE, FALSE, 0);
      gtk_widget_set_size_request (st->comboboxentry1, 56, -1);
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("1"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("2"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("3"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("4"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("5"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("6"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("7"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("8"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("9"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("10"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("11"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("12"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("13"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("14"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("15"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("16"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("17"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("18"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("19"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("20"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("21"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("22"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("23"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("24"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("25"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("26"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("27"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("28"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("29"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("30"));
      gtk_combo_box_append_text (GTK_COMBO_BOX (st->comboboxentry1), _("31"));
    st->comboboxentry2 = gtk_combo_box_entry_new_text ();
      gtk_widget_show (st->comboboxentry2);
      gtk_box_pack_end (GTK_BOX (vbox5), st->comboboxentry2, FALSE, FALSE, 0);
      gtk_widget_set_size_request (st->comboboxentry2, 100, -1);
     
    g_signal_connect (G_OBJECT (st->comboboxentry1), "changed",
                        G_CALLBACK (on_comboboxentry1_changed),
                        (gpointer) st);
    interface.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef struct
    {
       GtkWidget *comboboxentry1;
       GtkWidget *comboboxentry2;
     
     }
    text_st;
     
    GtkWidget* create_window1 (text_st * st);
    et main.c

    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
     
    #  include "config.h"
     
     
    #include <gtk/gtk.h>
     
    #include "interface.h"
    #include "support.h"
     
    #ifdef G_OS_WIN32
    char *package_prefix;
    char *package_datadir;
    #endif
     
     
    int
    main (int argc, char *argv[])
    {
      GtkWidget *window1;
      text_st    st;
     
     
    #ifdef G_OS_WIN32
      gchar *temp;
     
      package_prefix = g_win32_get_package_installation_directory (NULL, NULL);
      package_datadir = g_strdup_printf ("%s%s", package_prefix, "/share");
    #endif
     
    #ifdef ENABLE_NLS
    #ifdef G_OS_WIN32
      temp = g_strdup_printf ("%s%s", package_prefix, "/lib/locale");
      bindtextdomain (GETTEXT_PACKAGE, temp);
      g_free (temp);
    #else
      bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
    #endif
      bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
      textdomain (GETTEXT_PACKAGE);
    #endif
     
      gtk_set_locale ();
      gtk_init (&argc, &argv);
     
    #ifdef G_OS_WIN32
      temp = g_strdup_printf ("%s/%s%s", package_datadir, PACKAGE, "/pixmaps");
      add_pixmap_directory (temp);
      g_free (temp);
    #else
      add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");
    #endif
     
     
      /*
       * The following code was added by Glade to create one of each component
       * (except popup menus), just so that you see something after building
       * the project. Delete any components that you don't want shown initially.
       */
      window1 = create_window1 (&st);
      gtk_widget_show (window1);
     
      gtk_main ();
     
    #ifdef G_OS_WIN32
      g_free (package_prefix);
      g_free (package_datadir);
    #endif
      return 0;
    }
    pourquoi ca ne va pas?
    merci

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut
    j'essaye de mettre autres choses en arguments mais ca ne va pas, en fait je me suis demander si il fallait pas mieux mettre ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void
    on_comboboxentry1_changed(GtkComboBoxEntry *combobox,gpointer user_data)
    definir en argument un gtkcomboboxentry qui pour moi aurait été logique puisque je n'ai que des comboboxentry mais ca me marque encore plus de problème donc je ne pense pas que ca soit ca, je suppose pourtant que mon erreur est dans la passage des arguments, non?

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2005, 18h03
  2. comment ne pas enregistrer dans le fichier log?
    Par trotters213 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 21/03/2005, 14h56
  3. [LG]Enregistrements dans un fichier
    Par ticoude dans le forum Langage
    Réponses: 1
    Dernier message: 26/11/2004, 18h33
  4. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 00h59
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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