Colorer le text dans un editor gadget
- Le psychopathe
- Messages : 764
- Inscription : jeu. 03/mars/2005 19:23
Colorer le text dans un editor gadget
Bonjour, bonsoir ^^
Voilà je cherche à colorer du texte dans un editorgadget sous windows et linux. Donc les api sont à proscrire.
Les balises rtf sous linux ??
@dobro : ton post sur le rtf est très intéressant mais je m"y perd ^^
Serait-il possible de me mettre juste par exemple ce mot est en rouge.
{\rtf {\rouge PHRASE ROUGE}}
Merci d'avance pour vos réponses
Voilà je cherche à colorer du texte dans un editorgadget sous windows et linux. Donc les api sont à proscrire.
Les balises rtf sous linux ??
@dobro : ton post sur le rtf est très intéressant mais je m"y perd ^^
Serait-il possible de me mettre juste par exemple ce mot est en rouge.
{\rtf {\rouge PHRASE ROUGE}}
Merci d'avance pour vos réponses
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
De toute facon, tu ne pourras faire qu'avec les apis.
Sous windows, ce sera le rtf.
Sous Linux, un exemple C facile à reproduire en PB.
http://library.gnome.org/devel/gtk/stab ... l#id801721
Sous windows, ce sera le rtf.
Sous Linux, un exemple C facile à reproduire en PB.
http://library.gnome.org/devel/gtk/stab ... l#id801721
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Le psychopathe
- Messages : 764
- Inscription : jeu. 03/mars/2005 19:23
C'est gentil mais j'ai pas encore appris le C, cette année je vais apprendre le C++ mais cela doit se tenir ^^Progi1984 a écrit :De toute facon, tu ne pourras faire qu'avec les apis.
Sous windows, ce sera le rtf.
Sous Linux, un exemple C facile à reproduire en PB.
http://library.gnome.org/devel/gtk/stab ... l#id801721
Je vais encore abuser est ce que une âme charitable peut me le convertir en PB, en plus cela va servir à d'autre personne.
Code : Tout sélectionner
GtkWidget *view;
GtkTextBuffer *buffer;
GtkTextIter start, end;
PangoFontDescription *font_desc;
GdkColor color;
GtkTextTag *tag;
view = gtk_text_view_new ();
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
gtk_text_buffer_set_text (buffer, "Hello, this is some text", -1);
/* Change default font throughout the widget */
font_desc = pango_font_description_from_string ("Serif 15");
gtk_widget_modify_font (view, font_desc);
pango_font_description_free (font_desc);
/* Change default color throughout the widget */
gdk_color_parse ("green", &color);
gtk_widget_modify_text (view, GTK_STATE_NORMAL, &color);
/* Change left margin throughout the widget */
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 30);
/* Use a tag to change the color for just one part of the widget */
tag = gtk_text_buffer_create_tag (buffer, "blue_foreground",
"foreground", "blue", NULL);
gtk_text_buffer_get_iter_at_offset (buffer, &start, 7);
gtk_text_buffer_get_iter_at_offset (buffer, &end, 12);
gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
En pseudo code et de mémoire, ca doit fonctionner :
Code : Tout sélectionner
define.GtkWidget *view;
define.GtkTextBuffer *buffer;
define.GtkTextIter start, end;
define.PangoFontDescription *font_desc;
define.GdkColor color;
define.GtkTextTag *tag;
view = gtk_text_view_new_()
buffer = gtk_text_view_get_buffer_(view)
gtk_text_buffer_set_text_(buffer, "Hello, this is some text", -1)
; Change default font throughout the widget
font_desc = pango_font_description_from_string_("Serif 15")
gtk_widget_modify_font_(view, font_desc)
pango_font_description_free_(font_desc)
; Change default color throughout the widget
gdk_color_parse_("green", @color)
gtk_widget_modify_text_(view, #GTK_STATE_NORMAL, @color)
; Change left margin throughout the widget
gtk_text_view_set_left_margin_(view, 30)
; Use a tag to change the color for just one part of the widget
tag = gtk_text_buffer_create_tag_(buffer, "blue_foreground", "foreground", "blue", #NULL)
gtk_text_buffer_get_iter_at_offset_(buffer, @start, 7)
gtk_text_buffer_get_iter_at_offset_(buffer, @end, 12)
gtk_text_buffer_apply_tag_(buffer, tag, @start, @end)
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Et bien sur, PB ne gère pas l'API de Pango
Essaie de voir sur le forum EN ce qu'ils peuvent t'aider à traduire ce code !

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Le psychopathe
- Messages : 764
- Inscription : jeu. 03/mars/2005 19:23
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Un conseil, poste sur le forum EN, comme ca, on verra comment ils font et je pense pouvoir t'aider pour la suite 

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Le psychopathe
- Messages : 764
- Inscription : jeu. 03/mars/2005 19:23
-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Salut.
Je ne sais pas si cela va t'aider.
Vu que tu cherches du code portable, en voici qui fonctionne sous Linux.
Bon y'a des erreurs du compilo mais avec des pros de Linux ici ça devrait pouvoir se corriger.
A l'époque où je cherchais pour faire un éditeur multi-plateforme j'avais trouvé ceci.
Cela permet de mettre du code en gras italique et souligné, alors peut-être aussi en couleur... A voir.
http://www.purebasic.fr/french/viewtopic.php?p=77205
Et un tuto pour comprendre ça :
http://franckh.developpez.com/tutoriels/gtk/gtktexttag/
Ensuite pour Windows quelqu'un (Un français) à fait un éditeur où l'on pouvait aussi mettre en gras italique et souligné.
Bon ce français à bien fait de mettre son pseudo dans son code :Arrgghhh!!! je viens de faire tourner le code de LSI et cela ne fonctionne pas tout à fait comme pour Linux.
Mais ça peut peut-être ouvrir quelques pistes pour transformer à la volée le code sélectionné sous Windows, peut-être avec un mix du code de Dobro.
Bye.
Je ne sais pas si cela va t'aider.
Vu que tu cherches du code portable, en voici qui fonctionne sous Linux.
Bon y'a des erreurs du compilo mais avec des pros de Linux ici ça devrait pouvoir se corriger.
A l'époque où je cherchais pour faire un éditeur multi-plateforme j'avais trouvé ceci.
Cela permet de mettre du code en gras italique et souligné, alors peut-être aussi en couleur... A voir.
http://www.purebasic.fr/french/viewtopic.php?p=77205
Et un tuto pour comprendre ça :
http://franckh.developpez.com/tutoriels/gtk/gtktexttag/
Ensuite pour Windows quelqu'un (Un français) à fait un éditeur où l'on pouvait aussi mettre en gras italique et souligné.
Bon ce français à bien fait de mettre son pseudo dans son code :
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Modifier un texte dans un StringGadget ou un EditorGadget en partant de la position du curseur
Procedure EditText(Gadget, Type, Text_Start.s, Text_End.s = "")
; type = 0 : Insertion de texte sur le curseur
; type = 1 : insertion de texte autour de la sélection
Protected Debut_Position, Fin_position, Texte.s, Index.l
Select GadgetType(Gadget)
Case #PB_GadgetType_String
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
Texte = GetGadgetText(Gadget)
If Type = 0
Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start + Text_End)
Fin_position = Debut_Position
Else
Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start)
Fin_position + Len(Text_Start)
EndIf
SetGadgetText(Gadget, Texte)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
SetActiveGadget(Gadget)
Case #PB_GadgetType_Editor
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
For Index = 0 To CountGadgetItems(Gadget) - 1
If Texte <> ""
Texte + Chr(10)
EndIf
Texte + GetGadgetItemText(Gadget, Index)
Next
If Type = 0
Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start + Text_End)
Fin_position = Debut_Position
Else
Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
Debut_Position + Len(Text_Start)
Fin_position + Len(Text_Start)
EndIf
SetGadgetText(Gadget, Texte)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
SetActiveGadget(Gadget)
EndSelect
EndProcedure
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Texte", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
End
EndIf
StringGadget(0, 0, 0, 300, 25, "")
EditorGadget(1, 0, 30, 300, 100)
ButtonGadget(2, 0, 150, 300, 25, "Insérer le texte 'Blabla' au l'endroit du curseur")
ButtonGadget(3, 0, 175, 300, 25, "Entourer le texte sélectionné par '<b>' et '</b>'")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu() ; Menus
EndSelect
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case 0 ; String
Gadget_LostFocus = 0
Debug "String"
Case 1 ; Editor
Gadget_LostFocus = 1
Debug "Editor"
Case 2
Debug "Insertion"
EditText(Gadget_LostFocus, 0, "Blabla")
Case 3
EditText(Gadget_LostFocus, 1, "<b>", "</b>")
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End
Mais ça peut peut-être ouvrir quelques pistes pour transformer à la volée le code sélectionné sous Windows, peut-être avec un mix du code de Dobro.
Bye.
-
- Messages : 471
- Inscription : dim. 23/déc./2007 18:10
Les erreurs Linux sont peut-être dû au code :
qui se trouve dans la boucle principale.
Comme me l'avait expliqué Cpl.Bator il faudra plutôt faire un truc du genre : au niveau de la construction de l'interface et bien sûr de supprimer le code causant l'erreur de la boucle Repeat...Until
Code : Tout sélectionner
Case #gadget_Main_Button_Bold
ApplyStyle("bold")
Case #gadget_Main_Button_Italic
ApplyStyle("italic")
Case #gadget_Main_Button_Underline
ApplyStyle("underline")
Comme me l'avait expliqué Cpl.Bator il faudra plutôt faire un truc du genre :
Code : Tout sélectionner
g_signal_connect_(GadgetID(#gadget_Main_Button_Bold), "clicked", @ApplyStyle("bold"), WindowID(#window_Main))
- Le psychopathe
- Messages : 764
- Inscription : jeu. 03/mars/2005 19:23
Je n'ai pas eu le temps de tester mais il semblerait que cela soit un debut de piste :
FORUM ENGLISH
http://purebasic.fr/english/viewtopic.p ... 123#176123
Et un autre post au l editor gadget gère la couleur ^^
http://www.purebasic.fr/english/viewtopic.php?t=19817
Et encore dans le même style :
http://www.purebasic.fr/english/viewtopic.php?t=11375
FORUM ENGLISH
http://purebasic.fr/english/viewtopic.p ... 123#176123
Code : Tout sélectionner
;Philipp Schmieder (WishMaster/vonTurnundTaxis)
;http://www.noname-development.de
;03.01.2007
;Released under the terms of the LGPL (http://www.gnu.org/licenses/lgpl.html)
Define StartIter.GtkTextIter
Define EndIter.GtkTextIter
Define PBStartIter.GtkTextIter
Define PBEndIter.GtkTextIter
Enumeration
#Pango_Style_Normal
#Pango_Style_Oblique
EndEnumeration
#Pango_Weight_Normal = 400
#Pango_Weight_Bold = 800
If OpenWindow(1, 1, 1, 800, 530, "")
If CreateGadgetList(WindowID(1))
EditorGadget(1, 0, 0, 800, 500)
SetGadgetText(1, "PureBasic" + Chr(10) + "PureBasic, ontwikkeld door Frédéric Laboureur (Fantaisie Software, Frankrijk)," + Chr(10) + "is een commerciële compiler voor Windows, Linux, AmigaOS en Mac OS. De programma's zijn klein en" + Chr(10) + "snel, de syntax een mix tussen BASIC en C. Naast de vele krachtig geoptimaliseerde bibliotheken" + Chr(10) + "(GUI-gadgets, beeld, geluid, netwerk, database, compressie, cryptografie, ....) kan men rechtstreeks" + Chr(10) + "WinAPI aanspreken en Assembler-code gebruiken (Inline-Assembler). Bovendien is het mogelijk om" + Chr(10) + "een bibliotheek te schrijven. Verder biedt PureBasic sinds versie 3.5 een rudimentaire 3D-engine" + Chr(10) + "(OGRE 3D), waarmee het mogelijk is snel en eenvoudig kleine 3-D toepassingen te programmeren." + Chr(10) + Chr(10) + "Een essentieel voordeel vergeleken met andere programmeertalen is het bijzondere feit dat de taal" + Chr(10) + "doorlopend ontwikkeld wordt, steeds krachtiger wordt en dat nieuwe instructies de taal verder" + Chr(10) + "optimaliseren. De aanschaf van PureBasic houdt automatisch in dat alle toekomstige updates gratis" + Chr(10) + "zijn in de vorm van downloads. Verdere kosten bij het verkopen van door u ontwikkelde programma's" + Chr(10) + "zijn er niet, geschreven programma's kunnen licentie-vrij verhandeld worden zonder rekening te" + Chr(10) + "hoeven houden met beperkingen van de kant van de fabrikant.")
Buffer = gtk_text_view_get_buffer_(GadgetID(1))
ButtonGadget(2, 0, 500, 200, 30, "Reset Styles")
ButtonGadget(3, 200, 500, 200, 30, "Bold")
ButtonGadget(4, 400, 500, 200, 30, "Oblique")
ComboBoxGadget(5, 600, 500, 200, 30)
AddGadgetItem(5, 0, "very small")
AddGadgetItem(5, 0, "small")
AddGadgetItem(5, 0, "big")
AddGadgetItem(5, 0, "huge")
gtk_text_buffer_create_tag_(Buffer, "bold", "weight", #Pango_Weight_Bold)
gtk_text_buffer_create_tag_(Buffer, "oblique", "style", #Pango_Style_Oblique)
gtk_text_buffer_create_tag_(Buffer, "very small", "size", 4000)
gtk_text_buffer_create_tag_(Buffer, "small", "size", 9000)
gtk_text_buffer_create_tag_(Buffer, "big", "size", 15000)
gtk_text_buffer_create_tag_(Buffer, "huge", "size", 30000)
gtk_text_buffer_get_iter_at_offset_(Buffer, @PBStartIter, 0)
gtk_text_buffer_get_iter_at_offset_(Buffer, @PBEndIter, 9)
gtk_text_buffer_apply_tag_by_name_(Buffer, "bold", @PBStartIter, @PBEndIter)
gtk_text_buffer_apply_tag_by_name_(Buffer, "big", @PBStartIter, @PBEndIter)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case 2
gtk_text_buffer_get_selection_bounds_(Buffer, @StartIter, @EndIter)
gtk_text_buffer_remove_all_tags_(Buffer, @StartIter, @EndIter)
Case 3
gtk_text_buffer_get_selection_bounds_(Buffer, @StartIter, @EndIter)
gtk_text_buffer_apply_tag_by_name_(Buffer, "bold", @StartIter, @EndIter)
Case 4
gtk_text_buffer_get_selection_bounds_(Buffer, @StartIter, @EndIter)
gtk_text_buffer_apply_tag_by_name_(Buffer, "oblique", @StartIter, @EndIter)
Case 5
gtk_text_buffer_get_selection_bounds_(Buffer, @StartIter, @EndIter)
gtk_text_buffer_remove_tag_by_name_(Buffer, "small", @StartIter, @EndIter)
gtk_text_buffer_remove_tag_by_name_(Buffer, "very small", @StartIter, @EndIter)
gtk_text_buffer_remove_tag_by_name_(Buffer, "big", @StartIter, @EndIter)
gtk_text_buffer_remove_tag_by_name_(Buffer, "huge", @StartIter, @EndIter)
gtk_text_buffer_apply_tag_by_name_(Buffer, GetGadgetText(5), @StartIter, @EndIter)
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
Et un autre post au l editor gadget gère la couleur ^^
http://www.purebasic.fr/english/viewtopic.php?t=19817
Et encore dans le même style :
http://www.purebasic.fr/english/viewtopic.php?t=11375
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Re: Colorer le text dans un editor gadget
Tite question : est il possible de sauvegarder du texte formaté sous gtk+ et de le restaurer comme on le fait avec le RTF sous Windows ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net