![]() |
Richedit Wörteraustauschen
Hi,
ich habe folgendes Problem mit "Richedit". ich habe in meinen Richedit meinen Text formatiert und ausgerichtet. Nun möchte ich die eingebauten Platzhalter (z.B. &&name) durch einen anderen Eintrag ersetzen. Ich verwende dazu folgenden Code:
Delphi-Quellcode:
Nach diesen Durchgang sind zwar die Einträge geändert worden ab die Formatierung ist weg.
var
n,m,k : integer; S,S1: string; Suchfeld: array[1..12] of string; Ersetzenmit: array[1..12] of string; begin suchfeld[1] := '&&anrede'; suchfeld[2] := '&&vname'; suchfeld[3] := '&&strasse'; suchfeld[4] := '&&plz'; suchfeld[5] := '&&ort'; suchfeld[6] := '&&name'; suchfeld[7] := '&&datum'; Ersetzenmit[1] := dbedit3.Text; Ersetzenmit[2] := dbedit1.Text + ' ' + dbedit2.text; Ersetzenmit[3] := dbedit4.Text + ' ' + dbedit5.text; Ersetzenmit[4] := dbedit6.Text; Ersetzenmit[5] := dbedit7.Text; Ersetzenmit[6] := dbedit1.Text; Ersetzenmit[7] := formatdatetime('DD. mmmm.YYYY', now); if OpenDialog1.Execute then begin F0002_anschreiben.QRRichText1.Lines.LoadFromFile(OpenDialog1.FileName); end; S := F0002_anschreiben.QRRichText1.Lines.Text; for n :=1 to 7 Do Begin M:= 1; K := length(suchfeld[n]); while Pos(suchfeld[n], lowercase(S)) > 0 do Begin M:= M + 1; i := Pos(suchfeld[n], lowercase(S)); if copy(lowercase(S),I,k) = suchfeld[n] then Begin Delete(S,I,k); Insert(Ersetzenmit[n],S,I); end; if M = 500 then break; end; end; F0002_anschreiben.QRRichText1.Lines.text := s; F0002_anschreiben.QuickRep1.Preview; Was mach ich falsch, wie wäre es richtig ? Dank für Eure Unterstüzung :roll: |
Re: Richedit Wörteraustauschen
Schau dir mal stringreplace an, das spart viel Arbeit ;-)
Delphi-Quellcode:
stringreplace(Richedit1.Text,'&&name','Hans Müller');
|
Re: Richedit Wörteraustauschen
@Reini64: Einmal den Thread zu eröffnen reicht vollkommen. Der andere ist gelöscht :roll:
...:cat:... |
Re: Richedit Wörteraustauschen
Hallo
mit stringreplace wird das gleiche werden, da du hier zwangsläufig wieder den text zum richedit zuweist und damit gehen dir wieder die Formatierungen flöten. Eine andere Variante wäre die Findtext methode des richedits zum suchen und seltext quasi zum ersetzen zu nutzen. In der Hilfe zu richedit.findtext ist auch ein Bsp, das man umbasteln kann: hier mal gaaaanz grob, nur zum probieren:
Delphi-Quellcode:
du müßtest halt noch den suchbeginn anpasen und das ganze solange durchlaufen, bis keine Worte mehr gefunden werden. Da ist noch ein bissel Arbeit notwendig, die Formatiereungen bleiben aber erhalten.
procedure TForm1.Button4Click(Sender: TObject);
var FoundAt: LongInt; StartPos, ToEnd: Integer; begin with RichEdit1 do begin { Suchbeginn nach der aktuellen Markierung (falls vorhanden), } { andernfalls am Textanfang starten } if SelLength <> 0 then StartPos := SelStart + SelLength else StartPos := 0; { ToEnd ist die Länge von StartPos bis zum Ende des Textes im RTF-Eingabefeld } ToEnd := Length(Text) - StartPos; FoundAt := FindText('&&name', StartPos, ToEnd, [stMatchCase]); //<<- if FoundAt <> -1 then begin SetFocus; SelStart := FoundAt; SelLength := Length('&&name'); //<<- seltext := 'Hans Müller'; //<<- end; end; end; Mfg Frank |
Re: Richedit Wörteraustauschen
such ma bei torry.net nach TSuperMask..
dann haste weniger code, aber gleiches result ;) Powerstreamer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz