enyaw_ecurb hat geschrieben:
Meine Frage: Wenn eine Ansi-Funktion jetzt vorgibt mit speziellen Zeichen zurechtzukommen und dafür einen widestringmanager braucht, dann sollte die Sache doch eigentlich funktionieren, oder? Immerhin klappt es mit normalen Umlauten 'ä,ö,ü' auch ganz gut...
Es ist eher seltsam, dass es mit den Umlauten klappt.
Vergiss das Ansi Zeug.
Hier gibt's eine Fkt. die scheint zu funzen
http://www.delphipraxis.net/post377911.html#377911" onclick="window.open(this.href);return false;
Einfach die Params/das Resultat von/nach UTF-8 wandeln.
Aber das ist nur gut für den "Hausgebrauch". Wenn du das seriös machen willst, musst du mindestens noch normalisieren.
Memo1.Text:= TCharacter.Normalize_NFKC(Memo1.text); (
http://wiki.lazarus.freepascal.org/Theodp" onclick="window.open(this.href);return false; )
EDIT: Nö, Sorry der Code im Link oben ist gar nicht case-insensitive (Wie da geschrieben steht).
Für den Hausgebrauch kann man aber den Code aus "sysstr.inc" rauskopieren und auf WideString anpassen.
Das müsste gehen.
Code: Alles auswählen
Function WideStringReplace(const S, OldPattern, NewPattern: WideString; Flags: TReplaceFlags): WideString;
var
Srch,OldP,RemS: WideString; // Srch and Oldp can contain uppercase versions of S,OldPattern
P : Integer;
begin
Srch:=S;
OldP:=OldPattern;
if rfIgnoreCase in Flags then
begin
Srch:=WideUpperCase(Srch);
OldP:=WideUpperCase(OldP);
end;
RemS:=S;
Result:='';
while (Length(Srch)<>0) do
begin
P:=Pos(OldP, Srch);
if P=0 then
begin
Result:=Result+RemS;
Srch:='';
end
else
begin
Result:=Result+Copy(RemS,1,P-1)+NewPattern;
P:=P+Length(OldP);
RemS:=Copy(RemS,P,Length(RemS)-P+1);
if not (rfReplaceAll in Flags) then
begin
Result:=Result+RemS;
Srch:='';
end
else
Srch:=Copy(Srch,P,Length(Srch)-P+1);
end;
end;
end;