Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zeichen in einem Memo ersetzen (https://www.delphipraxis.net/100784-zeichen-einem-memo-ersetzen.html)

Schmile 3. Okt 2007 20:40


Zeichen in einem Memo ersetzen
 
hallo!

ich möchte gerne in einem memo-feld die deutschen sonderzeichen durch html-konforme zeichen ersetzen lassen und benutze folgende prozedur:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
StringReplace(Memo1.Text,'ü','ü',[rfReplaceAll])
end;
allerdings tut sich da nichts... habe ich noch irgendwas vergessen?

grüße

Ultimator 3. Okt 2007 20:43

Re: Zeichen in einem Memo ersetzen
 
Ja, Stringreplace tut das nicht einfach so, sondern du musst das Ergebnis der Funktion auch weiterverwerten.
Etwa so:
Delphi-Quellcode:
var blah: string;
blah := "hallo";
blah := Stringreplace(blah,'a','ß',[rfReplaceAll]); //blah hat nun den Wert "hßllo"

Die Muhkuh 3. Okt 2007 20:47

Re: Zeichen in einem Memo ersetzen
 
Und in Deinem konkreten Fall:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text := StringReplace(Memo1.Text,'ü','ü',[rfReplaceAll])
end;

Schmile 3. Okt 2007 20:56

Re: Zeichen in einem Memo ersetzen
 
alles klar, vielen dank!

Ultimator 4. Okt 2007 01:03

Re: Zeichen in einem Memo ersetzen
 
Um generell was dazu zu sagen:
Ich würde mit einer lokalen Variable arbeiten, da der ständige Zugriff TMemo.Text wohl bei mehreren Durchläufen zeitraubend sein dürfte. Bei ä, ö, ü und vielleicht noch ß wird das nicht so ins Gewicht fallen, aber es gibt sicher Anwendungsfälle, wo mehr Buchstaben(-ketten) geändert werden müssen.
Etwa so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var dertext: string;
begin
  dertext := Memo1.Text;
  dertext := StringReplace(dertext,'ä','ä',[rfReplaceAll]);
  dertext := StringReplace(dertext,'ö','ö',[rfReplaceAll]);
  dertext := StringReplace(dertext,'ü','ü',[rfReplaceAll]);
  dertext := StringReplace(dertext,'ß','&szuml;',[rfReplaceAll]);
  dertext := StringReplace(dertext,'udn','und',[rfReplaceAll]);
  Memo1.Text := dertext;
end;

Matze 4. Okt 2007 05:33

Re: Zeichen in einem Memo ersetzen
 
Hi,

wenn hier schon die Performance angesprochen wird, dann sollte gesagt werden, dass StringReplace eine relativ langsame Funktion ist, weshalb ein mehrmaliger Aufruf nicht sonderlich gut ist. Schneller geht es mit diesen Funktionen aus der Code-Library:

Mehrere Strings auf einmal ersetzen
Mehrere Strings auf einmal ersetzen


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz