Chercher texte dans RTB

Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
- - Dernière réponse : sebleboss2002
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
- 1 févr. 2004 à 18:50
Bonjour tout le monde !

Mon problème est simple, mais comme d'hab, je sèche : je voudrais rechercher un mot dans une RTB. Parce que avec tout ce que j'ai essayé, il ne me sort que le premier mot ! J'aimerais en fait colorer en bleu toutes les occurences du mot "help" dans une RTB.

Voilà, merci d'avance,

Seb.
Afficher la suite 

5 réponses

Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
0
Merci
Utilise la fonction Find du contrôle RichTextBox pour cela : elle te renvoie la position de l'occurence de la première lettre du mot à chercher. Utilise ensuite la sélection pour sélectionner ton mot, et enfin la méthode SelColor pour définir la couleur du texte sélectionné.

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
0
Merci
Merci bien Darksidious, mais c'est justement ce que je fais, le problème étant que le code ressemble à un truc comme ça :

Dim Var As String
Var = "help"

  For i = 1 To Len(RTF)
    Mot = RTF.Find(Var)
    RTF.SelStart = Mot
    RTF.SelLenght = Len(Var)
    RTF.SelColor = vbBlue
  Next i


Mais il ne me colore que la première occurence !

Merci quand-même,

Seb.
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
0
Merci
Ben en fait c'est bon, en tapant mon message, la lumière m'est venue, et j'ai trouvé comment qu'il fallait faire :

Dim Var As String
Var = InputBox("Chercher :", "Recherche...")

 For i = 1 To Len(RTF)
  Mot = RTF.Find(Var, i)
   If Mot > 0 Then
    RTF.SelStart = Mot
    RTF.SelLength = Len(Var)
    RTF.SelColor = vbBlue
   End If
 Next i
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
0
Merci
Exact, ce code marche mieux ;-)
Petite précision tout de même pour des raisons d'optimisation : ne fait pas un mot RTF.Find(Var, i) mais un mot RTF.Find(Var, mot)

Ainsi, tu y gagne énormément !

De même, ne fait pas une boucle For, mais une boucle While avec comme test : RTF.Find(...) <> -1, ainsi, tu boucleras uniquement le nombre de fois que le mot cherché est dans ton RTF, et non plus le nombre de caractère de ton RTF, ce qui est extrémement bénéfique si ton contrôle possède beaucoup de lettre ! (essaye avec un bon million de lettres, tu verras la différence ;-))

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
0
Merci
Merci pour les astuces, c'est impec, et c'est vrai qu'on y gagne visiblement en vitesse !

Merci encore,
@+,

Seb.