Forums | Contact | Plan du site Menu Accueil » Programmation

Rechercher er remplacer dans un RichEdit

  Delphi vous permet de créer facilement un éditeur de texte grâce à son composant RichEdit. Il est néanmoins nécessaire de créer les procédures qui permettront à l'utilisateur d'effectuer des opérations (voir procédures pour un composant RichEdit).

Après avoir étudié les propriétés utiles pour la suite, nous verrons ici comment Rechercher / Rechercher et remplacer du texte dans le composant.


Les propriétés utiles du composant

 

  Le composant RichEdit dispose d'une fonction très utile à la recherche dans le texte qu'il contient. Il s'agit de la fonction Findtext pour laquelle il faudra indiquer certains paramètres...

Findtext(SearchStr, StartPos, Length, Options)

  • SearchStr (string) : le texte à rechercher (chaîne de caractères),

  • StartPos (integer) : détermine à partir de quel caractère doit commencer la recherche. Il s'agit donc d'un chiffre (Integer) indiquant la position du premier caractère. On peut bien sûr indiquer un chiffre directement mais on indiquera en général soit 0 (commencer depuis le début du fichier), soit RichEdit.SelStart (position du curseur ou début du texte sélectionné dans le composant).

  • Length (integer) : détermine sur combien de caractères va s'effectuer la recherche. Notez bien qu'il s'agit du nombre de caractères depuis StartPos (et non pas la position du caractère dans le composant). On indiquera en général length(RichEdit.Text) (fin du texte) ou RichEdit.SelLength (fin de la sélection courante)...

  • Options : par défaut, on recherche la chaîne sans tenir compte de la casse. Deux options possibles
    - [stWholeWord] : indique que l'on doit chercher un mot entier,
    - [stMatchCase] : indique qu'il faut tenir compte des minuscules/majuscules,
    - [stWholeWord, stMatchCase] : pour combiner les deux.


Menu rechercher

 
procedure TForm1.Bouton1Click(Sender: TObject) ;
Var pos:integer;
begin
// Effectue une recherche de texte dans tout le composant
pos := RichEdit1.FindText('texte',0,length(RichEdit1.Text),[])
// Idem mais tient compte de la casse (ne retourne pas Texte)
pos := RichEdit1.FindText('texte',0,length(RichEdit1.Text),[stMatchCase])
// Effectue une recherche de texte dans la sélection
pos := RichEdit1.FindText('texte',RichEdit1.SelStart,RichEdit1.SelLength,[])
// Idem mais on cherche le mot texte entier (ne retourne pas contexte)
pos := RichEdit1.FindText('texte',RichEdit1.SelStart,RichEdit1.SelLength,[stWholeWord])

// Si une occurrence a été trouvée, pos nous donnera sa position
// On peut donc maintenant sélectionner le texte trouvé dans le document :
if (pos<>-1) then begin // Vérifie si un texte a été trouvé
  RichEdit1.SelStart := pos; // Début de la sélection
  RichEdit1.SelLength := Length('texte'); // étendue de la sélection
end;
end;


Menu rechercher et remplacer

 

  Puisqu'il n'existe pas une telle fonction par défaut, on va utiliser la fonction de recherche et remplacer le(s) occurrence(s) trouvé(es). Nous allons donc créer une procédure spécifique que l'on va d'abord déclarer (parcourez le début du fichier, les déclarations de procédure se font juste avant « private » ). Ajouter :

procedure remplacer (cherche, remplace: string);

La procédure est déclarée, nous allons maintenant l'ajouter (sous « implementation » )

procedure TForm1.remplacer (cherche, remplace: string);
var debut, fin : integer; oldCursor : TCursor;
begin
  oldCursor := Screen.Cursor; // On enregistre le curseur utilisé
  Screen.Cursor := crHourglass; // On le remplace par le sablier
  with RichEdit1 do begin // On utilise le composant RichEdit
    debut := 0; // On commence la recherche du début
    fin := length(Text); // On la termine à la fin du texte
    debut := FindText(cherche, debut, fin, []); // Premier terme
    while debut <> -1 do begin // Boucle, jusqu'à la fin
	  SetFocus; // On donne la focalisation au composant
	  SelStart := debut; // On sélectionne le premier terme trouvé
	  SelLength := length(cherche) ; // Fin de la sélection
	  SelText := remplace; // On remplace le terme trouvé
	  debut := FindText(cherche, debut + length(remplace), fin, []);
      // ici on relance la recherche pour les autres termes
	end;
  end;
  Screen.Cursor := oldCursor; // Terminé. On remet le curseur.
end;

Ensuite il ne vous reste plus qu'à utiliser la procédure (ici lors d'un clic sur Bouton1)

procedure TForm1.Bouton1Click(Sender: TObject) ;
begin
remplacer('cherche', 'remplace');
end;

Des questions ? Rejoignez nous sur le forum...

 


Une question ? Venez échanger sur le forum...
Nom :
Sujet :
 

© Cédric MICHEL - conseil & création ( 2003 / 2024 )