Bonjour,
J'ai quelques questions à propos du tuto sur les zones de texte (là):
L'auteur écrit... :
...dans le premier exemple de programme (début du code de la fonction "saisie"):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 //On recupere le buffer text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
Est-ce que ce n'est pas plutôt :
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 #include <gtk\gtk.h> gboolean fin(GtkWidget *widget, GdkEvent *event, gpointer user_data); void saisie(GtkButton *button, GtkWidget *view); int main(int argc, char* argv[]) { GtkWidget* window; GtkWidget* box; GtkWidget* text_view; GtkWidget* button; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 320, 200); gtk_window_set_title(GTK_WINDOW(window), "XIII. Les zones de texte."); g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),0); box=gtk_vbox_new(FALSE,5); gtk_container_add(GTK_CONTAINER(window),box); text_view=gtk_text_view_new(); gtk_box_pack_start(GTK_BOX(box),text_view,TRUE,TRUE,0); button=gtk_button_new_with_label("Afficher"); gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0); g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(saisie),text_view); gtk_widget_show_all(window); gtk_main(); return 0; } gboolean fin(GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_widget_destroy(widget); gtk_main_quit(); return 0; } void saisie(GtkButton *button, GtkWidget *view) { GtkWidget *dialog; GtkTextBuffer* text_buffer=0; GtkTextIter start; GtkTextIter end; gchar* buf=0; //On recupere le buffer text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); //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 buf=gtk_text_buffer_get_text(text_buffer,&start, &end,TRUE); //On affiche le texte dans une boite de dialogue. dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Votre texte :\n%s", buf); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); //On libere la memoire g_free(buf); }
D'ailleurs l'auteur l'écrit comme ça dans le second exemple de programme. Est-ce que ça change quelque chose ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
Sinon pour le second exemple on a:
Pourquoi vider le contenu du buffer avant d'y ajouter le contenu du fichier qu'on a lu ? S'il contenait quelque chose ok, mais là il est vide...
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 void ouvrir_fichier(GtkWidget *bouton, GtkWidget *file_selection) { GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; FILE *fichier; const gchar *chemin; gchar lecture[1024]; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); chemin = gtk_file_selection_get_filename(GTK_FILE_SELECTION (file_selection)); fichier = fopen(chemin,"rt"); if(fichier == NULL) { GtkWidget *dialog; dialog = gtk_message_dialog_new(GTK_WINDOW(file_selection), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Impossible d'ouvrir le fichier : \n%s", g_locale_to_utf8(chemin, -1, NULL, NULL, NULL)); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); gtk_widget_destroy(file_selection); return; } gtk_widget_destroy(file_selection); gtk_text_buffer_get_start_iter(buffer,&start); gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_delete(buffer, &start, &end); while(fgets(lecture, 1024, fichier)) { gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_insert(buffer, &end, g_locale_to_utf8(lecture, -1, NULL, NULL, NULL), -1); } fclose(fichier); }
Merci d'avance pour vos éclaircissements !![]()
Partager