Salut,
Je voudrais créer une fonction qui ajoute du texte en couleur à un TextView.
Merci d'avance à toute personne pouvant apporter son aide.
Voici un exemple -il compile- c'est la fonction Ajouter_Texte() qui pose 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
#include <gtk/gtk.h>
 
/*------------------------------------------------------------------------------
  Type
 -----------------------------------------------------------------------------*/
 typedef struct {
   GtkWidget *fen;
   GtkWidget *TextView;
   GtkTextBuffer *TextBuf;
   GtkTextIter iter;
 }  App;
 
/*------------------------------------------------------------------------------
  Prototypes
 -----------------------------------------------------------------------------*/
 App 	*creer_App();
 void	Ajouter_Texte	(App *a, gchar *msg, gchar *couleur);
 
/* =============================================================================
 * Point d' entrée *************************************************************
==============================================================================*/
int main(int argc, char **argv)
{
  App *a;
 
  gtk_init(&argc, &argv);
 
  a = creer_App();
 
  Ajouter_Texte(a, "Texte bleu\n"  , "#2B3D51");
  Ajouter_Texte(a, "Texte orange\n", "#E1B232");
 
  gtk_main();
 
  return 0;
}
 
/* =============================================================================
 * Ajoute du texte en couleur au TextView **************************************
==============================================================================*/
void Ajouter_Texte(App *a, gchar *msg, gchar *couleur)
{
  GdkColor color;
  gdk_color_parse (couleur, &color);
 
  gtk_text_buffer_insert (a->TextBuf, &a->iter, msg, -1);
 
/*
  GtkTextIter deb, fin;
  GtkTextTag *tag;
 
  tag = gtk_text_buffer_create_tag (a->TextBuf, NULL,"foreground", couleur, NULL);  
  //gtk_text_buffer_get_iter_at_offset (pTx, &iStart, 7);
  //gtk_text_buffer_get_iter_at_offset (pTx, &end, 12);
 
  gtk_text_buffer_get_start_iter(a->TextBuf, &deb);
  gtk_text_buffer_insert (a->TextBuf, &a->iter, msg, -1);
  gtk_text_buffer_get_end_iter(a->TextBuf, &fin);
 
  //gtk_text_buffer_get_end_iter(pTx, &iStart);
  //gtk_text_buffer_get_end_iter(pTx, &end);
  gtk_text_buffer_apply_tag (a->TextBuf, tag, &deb, &fin);
*/
}
 
/* =============================================================================
 * Crée l'interface ************************************************************
==============================================================================*/
App *creer_App()
{
  App *x;
  GdkColor color;
 
  x = (App *)g_malloc (sizeof(App));
 
  x->fen = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW(x->fen), "Ajout de texte en couleur");
  gtk_window_set_default_size(GTK_WINDOW(x->fen), 400, 400);
  g_signal_connect(G_OBJECT(x->fen), "destroy", G_CALLBACK(gtk_main_quit), NULL);
 
  x->TextView = gtk_text_view_new();
    gtk_container_add (GTK_CONTAINER(x->fen), x->TextView);
    x->TextBuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(x->TextView));
    gtk_text_buffer_get_end_iter(x->TextBuf, &x->iter);
    // Couleur du fond: orange
    gdk_color_parse ("#E87F3B", &color);
    gtk_widget_modify_base (x->TextView, GTK_STATE_NORMAL, &color);
 
  gtk_widget_show_all(x->fen);
 
  return x;
}