function TextToHtml(const Text: string): string; const MinusculesAccentuees = ['à', 'â', 'ä', 'é', 'è', 'ê', 'ë', 'î', 'ï', 'ô', 'ö', 'ù', 'û', 'ü', 'ç']; MajusculesAccentuees = ['À', 'Â', 'Ä', 'É', 'È', 'Ê', 'Ë', 'Î', 'Ï', 'Ô', 'Ö', 'Ù', 'Û', 'Ü', 'Ç']; // Autres = [..]; Modif = MinusculesAccentuees + MajusculesAccentuees; // + Autres (éventuellement) var i: Integer; c: char; begin Result := ''; i := 1; while i < Length(Text) do begin c : = Text[i]; if (c in Modif) then Result := Result + '&#' + IntToStr(Ord(c)) + ';' else begin case c of {$IFDEF MSWindows} #13: begin Result : = result + ' ' + sLineBreak; //on saute le caractère LineFeed qui suit inc(i); end; {$ENDIF} {$IFDEF Linux} sLineBreak: Result := Result + ' ' + c; {$ENDIF} else Result := Result + c; end ; end; inc(i); end; end; procedure TForm1.Memo1Change(Sender: TObject); begin Memo2.Text : = TextToHtml(Memo1.Text); end; Précisions : 1- Pour accélerer le traitement, l'argument Ch a été remplacé par Text pour mieux refléter le contenu transmis. 2- Pour optimiser le temps de traitement, il est maintenant transmis par adresse pour éviter des copies systématiquement en mémoire à chaque frappe de touche dans Memo1. 3- Affectation du ième caractère de Text à un caractère de type char. Ceci permet de clarifier le code en utilisant une structure Case..of au lieu d'une suite de if imbriqués. 4- La boucle For a été remplacée par une structure while, afin de pouvoir incrémenter la valeur de i quand c'est nécessaire. C'est notamment le cas du traitement du retour chariot qui, sous Windows a une longueur de 2 caractères alors que, sous Linux, sa longueur n'est que de 1 (cf. directives de compilation utilisées dans le code). 5- La constante sLineBreak n'est apparue qu'à partir de Delphi 6 (Kylix est sorti à ce moment là). Si vous n'en disposez pas, déclarez simplement une constante sLineBreak = #13#10; .
while i < Length(Text) doil faut mettre :
while i <= Length(Text) do
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question