Shadow29c
Messages postés4Date d'inscriptionsamedi 14 novembre 2009StatutMembreDernière intervention10 août 2010
-
10 août 2010 à 03:14
Shadow29c
Messages postés4Date d'inscriptionsamedi 14 novembre 2009StatutMembreDernière intervention10 août 2010
-
10 août 2010 à 17:21
Bonjour,
J’ai besoin de remplacer des variables dans un texte. Comme ce n'est pas évident à expliquer, je vais placer un exemple. Imaginer que c'est une lettre.
"
Bonjour %nom%,
J'ai bien aimé la rencontre du %date%.
"
Ce qui devrait se convertir en :
"
Bonjour Michel,
J'ai bien aimé la rencontre du 1er avril 1930.
"
Après plusieurs recherches sur internet, j'ai découvert une procédure me permettant d'apporter les modifications.
Procedure TMain.remplacer(VarRichText: trichedit; VarCherche, VarRemplace : string);
var
debut,
fin : integer;
oldCursor : TCursor;
begin
VarRichText.Enabled := true;
oldCursor := Screen.Cursor;
Screen.Cursor := crHourglass;
with VarRichText do begin
debut := 0;
fin := length(Text);
debut := FindText(VarCherche, debut, fin, []);
while debut <> -1 do begin
SetFocus;
SelStart := debut;
SelLength := length(VarCherche) ;
SelText := VarRemplace;
debut := FindText(VarCherche, debut + length(VarRemplace), fin, []);
End;
End;
Screen.Cursor := oldCursor;
VarRichText.Enabled := False;
end;
Mon Problème, c'est que je dois déplacer le curseur pour faire la recherche et le remplacement. Mais après, le curseur disparaît parce que je place le "Richtext.Enablee := False". J'aimerais que le curseur revienne au dernier endroit où il était avant que j'appelle cette procédure. Prenons comme exemple, le curseur doit retourner au 4e caractère du "tedit.text" d'où il est parti. Ou, existe-t-il une façon plus simple d'appliquer les changements? Avant j'utilisais "Format", mais cette fonction n'est pas assez complète pour l'utilisation que j'aimerais en faire.
cs_PHIL63
Messages postés76Date d'inscriptiondimanche 9 février 2003StatutMembreDernière intervention10 août 2010 10 août 2010 à 10:04
Salut,
pour un texte contenu dans une "String" tu as au moins deux fonctions qui peuvent te servir :
(Aide de Delphi)
- function AnsiReplaceStr(const AText, AFromText, AToText: string): string;
Remplace toutes les occurrences d'une sous-chaîne par une autre chaîne
- function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags):string;
Renvoie une chaîne dans laquelle des occurrences d'une sous-chaîne sont remplacées par une autre sous-chaîne.
Shadow29c
Messages postés4Date d'inscriptionsamedi 14 novembre 2009StatutMembreDernière intervention10 août 2010 10 août 2010 à 17:21
Merci Phil63 et fbalien,
C'est la première fois que j'utilise le site pour poser une question et je suis grandement impressionner par la rapidité de votre réponse.
J'ai utilisé la fonction "StringReplace" finalement. Je me cassais vraiment trop la tête pour rien.
begin
for I := 0 to VarRichText.Lines.Count - 1 do
VarRichText.Lines[I]:=StringReplace(VarRichText.Lines[I],VarCherche,VarRemplace,[rfReplaceAll, rfIgnoreCase]);
end;