RichTextBox et fonction Replace()

cs_nihaoma Messages postés 140 Date d'inscription jeudi 2 mai 2002 Statut Membre Dernière intervention 2 février 2010 - 25 juil. 2005 à 16:18
cs_nihaoma Messages postés 140 Date d'inscription jeudi 2 mai 2002 Statut Membre Dernière intervention 2 février 2010 - 26 juil. 2005 à 09:37
Bonjour à tous,
voila mon probleme:

j'essais d'analyser le contenu d'un RTB afin d'une part d'en retrouver les retour à la ligne et d'autre part, d'extraire les couleurs du text.
POur une raison que je ne connais pas, un "retour chariot" sur un RTB s'écrit CHR(13) suivit d'un CHR(10) (il me semblait qu'un retour chariot dans un text box était seulement un CHR(13) !) or, comme j'analyse mon texte caractère par caractère, afin de pouvoir détecter mes retours chariot, juste avant ma boucle d'analyse, je remplace tous les CHR(13) & CHR(10) par juste un CHR(13) (ce qui visuelement ne change rien) ensuite il ne me reste qu'a tester à chaque caractère si je ne suis pas sur un CHR(13). Ca ca fonctionne très bien, le soucis, c'est que lorsque j'ajoute ma ligne de remplacement, pour une raison que je ne connais pas, toutes les couleurs de mon RTB sont effacées et tout est remit en noir. Visiblement, la fonction Replace(), scanne aussi caractère par caractères pour retrouver la chaine entrée en paramètres, et "oublie" de remetre la bonne couleur après son passage.....
savez vous comment contourner ce problème svp ??

merci par avance,



coding as well

3 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
25 juil. 2005 à 18:41
Salut
Les retours à la ligne sont en effet des vbCrLf = 13+10
Pour les couleurs, tout dépend comment tu t'y prend.
Si tu fais RTB.Text = Replace(RTB.Text, "a", "b"), tu traites le contenu du RTB comme un texte brut : normal que tous les attributs disparaissent.
Il faut utiliser les attributs du RTB :
RTB.SelStart, RTB.SelLength, RTB.SelText et RTB.RTFText
Exemple : Pour récupérer la couleur d'un caractère :
RTB.SelStart = laPositionDuCaractèreDansLeTexte
RTB.SelLength = 1
Couleur = RTB.SelColor
Rappel : les caractères dans un RTB sont numérotés à partir de 0, pas de 1

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
(je
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 9
26 juil. 2005 à 04:16
Salut,

Et boilà, jack a encore tout dit ... Pff pas drôle ce gringo



T'as eu tes réponses, donc bon dev

++

Zlub
0
cs_nihaoma Messages postés 140 Date d'inscription jeudi 2 mai 2002 Statut Membre Dernière intervention 2 février 2010
26 juil. 2005 à 09:37
salut,
tout d'abord merci de ta réponse, mais je penses que je me suis mal exprimer:
j'utilise effectivement
RTB.SelStart = laPositionDuCaractèreDansLeTexte
RTB.SelLength = 1
Couleur = RTB.SelColor
pour récupérer la couleur d'un caractère et ca marche...

je sais que un retour chariot sur un RTB s'écrit CHR 13 + 10

mon problème était le suivant:
afin de pouvoir détecter les retour chariot durant le scan caractère par caractère de mon RTB, je faisait un
replace(RTB.text, CHR(13) & CHR(10), CHR(13)
avant ma boucle de scan afin de pouvoir détecter mes retour chariot avec un seul caractère, mais, comme tule décrit, la fonction replace() fonctionnant en text brut, cette dernière retirait tous les attributs de couleur, et donc ma boucle venant seulement après, je n'avais plus de couleur.

Mais entre temps, j'ai trouver une solution de remplacement (tellement simple que j'en ai eu honte d'avoir poster sur le forum ! lol)

en fait, maintenant, plutot que d'utiliser la fonction Replace() avant ma boucle, je fais directement mon scan caractère par caractères (ce qui concerve mes attribut de couleur) et lorsque je tombe sur un CHR(13), je teste si le caractère suivant est un CHR(10), si c le cas, je suis sur un retour chariot, et je continue....

c con, mais je n'y avait pas penser...désolé pour le dérangement, et merci
0