Ecrire différents types de textes dans un gadget
Ecrire différents types de textes dans un gadget
Je sais comment on fait pour utiliser une police d'écriture différente et la charger pour que le texte d'un Gadget soit entièrement normal, gras ou italique.
Mais je ne trouve pas le moyen de faire en sorte que l'on puisse mélanger différents types de textes dans un même gadget.
Par exemple, si je veux faire un bloc-note qui prend en charge différentes polices d'écriture, le gras et l'italique : je voudrais que seul le texte sélectionné dans mon gadget (l'EditorGadget en l'occurence) soit changé en gras si je clique sur le bouton gras, et pas l'ensemble du texte de l'éditeur... Un peu comme sous ms word.
Comment faire ?
Ah et question subsidiaire : comme enregistrer un fichier de sauvegarde du texte qui prenne en compte la police et le gras ? (le format .txt ne prend pas en compte cela...)
Mais je ne trouve pas le moyen de faire en sorte que l'on puisse mélanger différents types de textes dans un même gadget.
Par exemple, si je veux faire un bloc-note qui prend en charge différentes polices d'écriture, le gras et l'italique : je voudrais que seul le texte sélectionné dans mon gadget (l'EditorGadget en l'occurence) soit changé en gras si je clique sur le bouton gras, et pas l'ensemble du texte de l'éditeur... Un peu comme sous ms word.
Comment faire ?
Ah et question subsidiaire : comme enregistrer un fichier de sauvegarde du texte qui prenne en compte la police et le gras ? (le format .txt ne prend pas en compte cela...)
Alors voyons voir tout ça...
Le format RTF ? Hum, je connais pas ce format mais si je trouve le code des balises je suppose que je peux vite apprendre à m'en servir, je garde ça dans un coin de ma tête.
Scintilla ? Dans l'aide de purebasic ils n'en parlent pas, sauf pour dire qu'on a bien la licence. Je garde aussi cette idée.
J'essaie de comprendre le code que tu m'as fournis. Il m'intéresse particulièrement : si j'ai bien compris, pas besoin de rajouter de nouvelles libs. Alors la fenêtre et la boucle principale tout ça je comprends, mais je rame un peu à comprendre ta procédure...
D'où vient CHARFORMAT ? Ce n'est pas une structure qui a été déclarée dans le programme, à quoi ça sert ?
A quoi servent les différents éléments de format.CHARFORMAT ?
SendMessage_() ? J'avais déjà vu ce truc dans un tuto pour m'apprendre à faire des fenêtres popup avec les fonctions copier-coller, apparemment c'est cette fonction qui transforme le texte en gras/italique/etc. , j'ai bon ? #SCF_SELECTION permet de changer le format de la partie sélectionnée c'est ça ?
Le format RTF ? Hum, je connais pas ce format mais si je trouve le code des balises je suppose que je peux vite apprendre à m'en servir, je garde ça dans un coin de ma tête.
Scintilla ? Dans l'aide de purebasic ils n'en parlent pas, sauf pour dire qu'on a bien la licence. Je garde aussi cette idée.
J'essaie de comprendre le code que tu m'as fournis. Il m'intéresse particulièrement : si j'ai bien compris, pas besoin de rajouter de nouvelles libs. Alors la fenêtre et la boucle principale tout ça je comprends, mais je rame un peu à comprendre ta procédure...
D'où vient CHARFORMAT ? Ce n'est pas une structure qui a été déclarée dans le programme, à quoi ça sert ?
A quoi servent les différents éléments de format.CHARFORMAT ?
SendMessage_() ? J'avais déjà vu ce truc dans un tuto pour m'apprendre à faire des fenêtres popup avec les fonctions copier-coller, apparemment c'est cette fonction qui transforme le texte en gras/italique/etc. , j'ai bon ? #SCF_SELECTION permet de changer le format de la partie sélectionnée c'est ça ?
J'ai recherché des infos sur le format rtf sur internet. Le fichier doit commencer par '{', finir par '}', et les balises pour le gras sont \b et \b0.
J'ai donc créer une chaîne de character :
string$="{ texte normal et \b texte en gras\b0}"
Mais quand je la mets dans l'EditorGadget il ne m'affiche pas le format, il affiche ma chaîne brute. Comment dois-je faire pour que le format rtf soit pris en compte dans mon EditorGadget ?
J'ai donc créer une chaîne de character :
string$="{ texte normal et \b texte en gras\b0}"
Mais quand je la mets dans l'EditorGadget il ne m'affiche pas le format, il affiche ma chaîne brute. Comment dois-je faire pour que le format rtf soit pris en compte dans mon EditorGadget ?
le plus simple est de prendre ton bon vieux WordPad.
le RTF est son format par défaut.
par exemple, enregistre ce texte en tant que 'readme.rtf' et ouvre le avec WordPad :
ou bien directement dans l'EditorGadget :
quant à de la doc sur le RTF, tu as la doc officielle sur MSDN :
http://msdn2.microsoft.com/en-us/librar ... e.10).aspx
sans oublier le bon vieux wikipedia (en francais) :
http://fr.wikipedia.org/wiki/Rich_Text_Format
http://www.snake.net/software/RTF/RTF-Spec-1.7.pdf

le RTF est son format par défaut.
par exemple, enregistre ce texte en tant que 'readme.rtf' et ouvre le avec WordPad :
Code : Tout sélectionner
{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}{\f1\fswiss\fcharset0 Arial;}}
{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;\red128\green128\blue128;}
{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\qc\cf1\ul\b\f0\fs52 PureBasic Language\par
\cf0\ulnone\b0 Version 4.10 \par
\cf2\fs32 Beta 2\par
\cf3 For Windows, Linux, MacOS\cf2\f1\fs20\par
}
Code : Tout sélectionner
Define rtf.s
rtf = "{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}"
rtf + "{\f1\fswiss\fcharset0 Arial;}}"
rtf + "{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;\red128\green128\blue128;}"
rtf + "{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\qc\cf1\ul\b\f0\fs52 PureBasic Language\par"
rtf + "\cf0\ulnone\b0 Version 4.10 \par"
rtf + "\cf2\fs32 Beta 2\par"
rtf + "\cf3 For Windows, Linux, MacOS\cf2\f1\fs20\par}"
OpenWindow(0, 0, 0, 540, 200, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
EditorGadget(0, 10, 10, 520, 180)
SetGadgetText(0, rtf)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
http://msdn2.microsoft.com/en-us/librar ... e.10).aspx
sans oublier le bon vieux wikipedia (en francais) :
http://fr.wikipedia.org/wiki/Rich_Text_Format
http://www.snake.net/software/RTF/RTF-Spec-1.7.pdf

Dernière modification par Flype le mar. 07/août/2007 23:40, modifié 2 fois.
comme je te l'ai dit plus haut , une petite recherche te donnerai ce lien par exempleOctavius a écrit : Comment dois-je faire pour que le format rtf soit pris en compte dans mon EditorGadget ?

http://www.purebasic.fr/french/viewtopi ... hlight=rtf
Ca y est j'ai compris !!!!!!!!!!!!!!!!!!!
En fait c'est tout simple, après la création de l'éditeur il faut avoir ce message :
Ca permet d'afficher la mise en forme.
Et pour afficher le texte text$ mis en forme il suffira par exemple d'utiliser cette commande :
Les chaînes de caractères avant et après le text$ permettent de créer un environnement interprétable comme du RTF. A l'intérieure de notre chaîne de caractères text$ se trouveront les balises /b /b0 pour le gras, /i /i0 pour l'italique, etc.
C'est pas facile du tout pour un débutant de trouver ces informations, pourtant j'ai abondemment utilisé la fonction Recherche, aussi bien ici que sur Google, le problème essentiel étant qu'un débutant ne comprends pas la moitié des commandes utilisées dans un exemple de code produit par un expert (des pointeurs, des structures, des macros, des commandes de lib partout... alors que ça fait pas longtemps que j'ai quitté le monde idyllique des additions de variables...) il m'était donc difficile d'en tirer qqch de pertinent.
En fait c'est tout simple, après la création de l'éditeur il faut avoir ce message :
Code : Tout sélectionner
SendMessage_(GadgetID(#mon_editeur),#EM_SETTARGETDEVICE,#Null,0)
Et pour afficher le texte text$ mis en forme il suffira par exemple d'utiliser cette commande :
Code : Tout sélectionner
SetGadgetText(#mon_editeur,"{\rtf1\ansi "+text$+"}")
C'est pas facile du tout pour un débutant de trouver ces informations, pourtant j'ai abondemment utilisé la fonction Recherche, aussi bien ici que sur Google, le problème essentiel étant qu'un débutant ne comprends pas la moitié des commandes utilisées dans un exemple de code produit par un expert (des pointeurs, des structures, des macros, des commandes de lib partout... alors que ça fait pas longtemps que j'ai quitté le monde idyllique des additions de variables...) il m'était donc difficile d'en tirer qqch de pertinent.