Chercher texte dans RTB

Signaler
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
-
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
-
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.

5 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
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

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

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
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
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

Merci pour les astuces, c'est impec, et c'est vrai qu'on y gagne visiblement en vitesse !

Merci encore,
@+,

Seb.