PERTE DE COULEUR EN RTF

Résolu
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017 - 11 nov. 2006 à 19:31
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017 - 20 nov. 2006 à 18:15
Je n'arrive toujours pas à résoudre le problème de perte de coloration
en RTF dans mon programme, lors de la numérotation des lignes.
http://www.vbfrance.com/codes/JPNFODIZ-EDITEUR-TEXTE-MIXTE_40142.aspx
 Pour essayer de trouver une solution, j'ai travaillé en externe -->
'Conditions de test
'2 RichTextBox et 2 boutons
'Un coller de RTF avec couleurs en RTF1


Dim Tbl(10)




'LA COULEUR EST RETROUVEE EN RICHTEXRBOX2
Private Sub Command1_Click()
   Tbl(0) = RTF1.TextRTF
     RTF2.TextRTF = ""
     RTF2.TextRTF = Tbl(0)
End Sub
'---------------------------------------------------


'APRES DECOUPE LA COULEUR EST ABSENTE


Private Sub Command1_Click()
   Dim R
   Dim I As Integer
   Dim B As Integer
    'Découpage de RTF1 en prenant RTF1.TextRTF pour garder le RTF
    R = Split(RTF1.TextRTF, Chr(13) & Chr(10))
      
   'Remplissage du Buffer
   For I = 0 To 5
    Tbl(I) = R(I)
   Next I
 
  'Affichage dans le RichTextBox2  MAIS avec RTF2.Text --->
  
  RTF2.Text = ""
   For B = 0 To 5
      RTF2.Text = RTF2.Text & Format(B + 1, "000") & "  " & Tbl(B) & vbCrLf
      RTF2.SetFocus
   Next B

' LES LIGNES APPARAISSENT mais ONT DES INFOS 'Style
'004  \par \cf0\b0\fs20    Exemple
'005  \par \cf2\b *****************************
'006  \par \cf0\b0          \cf3\b REMPLIR
'ET n'ont pas de couleur.

 'SI ON MET RTF2.TextRTF au lieu de RTF2.Text
 '----> Pas d'affichage
  
 End Sub
  
Qui a connu ce problème et comment le résoudre?
Merci.

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 nov. 2006 à 04:11
Salut
Il faut bien comprendre la différence entre .Text et .TextRTF :
.Text : C'est du texte brut, sans couleur
.TextRTF : C'est du texte avec les attributs (couleurs, italique, gras ...)
   C'est du texte quand même, mais avec des balises RTF
Dans le dernier exemple que tu donnes, tu colles du texte pris au format RTF (.TextRTF) et tu l'affiches sans interprétation (.Text). C'est donc normal de retrouver du texte "bizarre" et sans couleur.

Ensuite, pour écrire tu texte dans une RTB (comme ta numérotation), il faut utiliser les syntaxes associées au travail avec les chaines de caratères : Toutes les méthodes qui commencent par ".Sel" :
Méthode standard :
With monRTB
     .SelStart = x  '  La position du curceur où insérer (le 1er caractère est à la position 0)
     .SelColor = vbRed   ' Un des attribut du texte
     .SelLenght = Len("Le texte à insérer")
     .SelText = "Le texte à insérer"
End With

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 nov. 2006 à 00:24
salut,
beh on dirait qu'il est résolu dans ma source, mais je ne passe pas par les propriété RTF...
çà peut toujours donner des idées

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 nov. 2006 à 04:14
Entre parenthèses, tu charges n'importe quelle souce qui parle d'un éditeur de texte avec une RichTextBox et tu verras comment procéder.
0
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
12 nov. 2006 à 07:50
Je vous remercie tous bien, pour vos réponses mais pour moi le problème reste:
_PCPT tu me dis que le problème semble résolu dans ta source mais
tu ne dis pas laquelle.
_JACK ce que tu m'as expliqué très clairement, je le savais et je te prie de croire que j'ai essayé avec toutes les possibilités ---> Text, TextRTF, SelText  , SelRTF .... et j'ai essayé de tout sélectionner avant le découpage, sans résultat.Et je te dis que des sources d'éditeurs j'en ai chargé.
Ce qui m'intrigue beaucoup, c'est le non affichage quand je mets
RTF2.TextRTF  ou même RTF2.SelRTF.
Avez-vous essayé avec mon exemple de test?

JACK, j'ai tenté ta méthode avec sélection préalable du texte ------->
 'Découpage de RTF1
    R = Split(RTF1.SelRTF, Chr(13) & Chr(10))
      
   'Remplissage du Buffer
   For I = 0 To 2
    Tbl(I) = R(I)
   Next I
  
 For B = 0 To 2
 With RTF2
     .SelStart = 0  '  La position du curseur où insérer (le 1er caractère ) 
    .SelColor = vbRed   ' Un des attributs du texte
     .SelLength = Len(RTF2.TextRTF)     .SelText RTF2.TextRTF RTF2.TextRTF & Format(B + 1, "000") & "  " & Tbl(B) & vbCrLf
End With
 Next B

Résultat:    Dans RTF2 on lit Faux ,point final.


Merci encore pour m'avoir fourni des pistes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 nov. 2006 à 10:23
mis à part qu'en cliquant sur mon pseudo tu aurais vu la liste de mes sources, le mot "[codes/RICHTEXTBOX-AVANCEE-AJOUTEZ-FACILEMENT-LIGNE-COULEUR-APPLIQUEZ-IMAGE_36551.aspx ma source]" est un lien
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
12 nov. 2006 à 10:37
Je vais mettre mon grain de sel

Sechaud, ce qui me choque c'est ceci :
   'Découpage de RTF1 en prenant RTF1.TextRTF pour garder le RTF
    R = Split(RTF1.TextRTF, Chr(13) & Chr(10))

Tu découpe ton texte selon les sauts de lignes sans tenir compte du format RTF. Le code RTF fonctionne un peu à l'image du html ou du xml, à l'aide de balises
En découpant uniquement sur les sauts de lignes, tu ne tiens pas comptent des balises rtf qui peuvent se retrouver découper en morceaux dans ce cas là.
Un saut de ligne peut se rencontrer dans une portion de texte formatée RTF. Le second morceau aura perdu sa balise de formatage, donc il n'aura plus aucun format (couleur, ici). Et si la balise utilisée necessite d'etre fermée, dans le premier morceau de texte, il n'y aura plus la balise fermante, donc le format ne sera pas reconnu non plus.

Ce qui expliquerait les caractères indésirables rencontrées, puisque non reconnue, les balises sont interpretées comme du simple texte.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
12 nov. 2006 à 11:39
Merci beaucoup.
PCPT, je vais regarder tes sources.
Casy, je crois que tu as peut-être trouvé l'explication.
0
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
20 nov. 2006 à 18:15
Comme d'habitude Jack avait trouvé la bonne piste.
Je le remercie à nouveau.
J'ai modifié mon découpage pour extraire la position des débuts de li'################################################
'DECOUPER DOCUMENT LIGNE PAR LIGNE
'################################################
Public Function Decoupage() '
    On Error GoTo Probleme
    Dim E As Integer
    Dim I As Integer
    Dim R


 'RAZ du Buffer
  For E = 0 To 800
   Tbl3(E) = ""
  Next E
 
  'Recopier RTF1 ligne par ligne dans le Buffer Tbl3()
  R = Split(RTF1.Text, Chr(13) & Chr(10))
   
  'Remplissage du Buffer
  For I = 0 To Val(Label1.Caption) - 1
    Tbl3(I) = R(I)
  Next I
 
  List1.Clear
  Dim F As Integer 'Position des débuts de lignes
  F = 0
 
  'Si on veut le n° de ligne, son début sa longueur
 ' List1.AddItem 1 & "  " & F & "  " & Len(Tbl3(0))
  
   List1.AddItem 0 '0 pour la Position du début du texte
   'On capture les autres positions
   For I = 1 To Val(Label1.Caption) - 1
        F = F + Len(Tbl3(I - 1)) + 2
    ' List1.AddItem I & "  " & F & "  " & Len(Tbl3(I))
   List1.AddItem F
   Next I
 
Probleme:
End Function


Private Sub CmdNumerote_Click()
    Dim B As Integer
   
   For B = 0 To Val(Label1.Caption) - 1
      With RTF1
        .SelStart = List1.List(B)
        .SelText = Format(B + 1, "000") & "   "
        .Span vbCr, True, True
        .SelLength = 0
     End With
   Next B
End Sub


gnes et après c'est bon.
0
Rejoignez-nous