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 :

Ajouter du texte en couleur dans un TextView


Sujet :

GTK+ avec C & C++

  1. #1
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut Ajouter du texte en couleur dans un TextView
    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;
    }

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Salut,

    pour modifier le style du texte dans un GtkTextView, c'est assez amusant

    Il faut commencer par créer des tags qui possèdent certains paramètres (italique, couleur du texte rouge, ...). Celà se fait lors de la création du GtkTextView et ensuite du utilise ces tags lors de l'ajout de texte.

    J'ai un exemple sous la main qui permet de mettre en évidence des mots (c'est pour une correction d'orthographe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        p_source_view = gtk_text_view_new ();
        p_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (p_source_view));
        gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (p_buffer), "faute",
                                    "background", "red", "foreground", "white",
                                    "style", PANGO_STYLE_NORMAL, NULL);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* word contient le mot a mettre en surbrillance */
                  gtk_text_iter_forward_search (&start, word,
                                                GTK_TEXT_SEARCH_TEXT_ONLY,
                                                &match_start, &match_end, NULL);
                  gtk_text_buffer_apply_tag_by_name (p_buffer, "faute",
                                                     &match_start, &match_end);

  3. #3
    Membre chevronné Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par défaut
    Salut,
    Je me vois mal créer 65635 tags, 1 pour chaque couleur. Non attends c'est 16 millions! C'est pour ça que j'ai commenté gtk_text_buffer_create_tag() dans mon code. Peut-être qu'il existe une autre manière?

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

Discussions similaires

  1. texte en couleur dans un textview
    Par topher dans le forum GTK+ avec Python
    Réponses: 1
    Dernier message: 31/10/2010, 18h34
  2. text multi couleur dans un JTextArea
    Par dalio2579 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 10/06/2006, 16h22
  3. certains texte en couleur dans une liste deroulante
    Par moicats dans le forum Access
    Réponses: 17
    Dernier message: 07/04/2006, 09h19
  4. text en couleur dans un tableau
    Par molesqualeux dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 02/09/2005, 18h43
  5. Ecrire du texte en couleurs dans un composant
    Par wutang dans le forum Composants
    Réponses: 11
    Dernier message: 12/07/2004, 10h55

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