AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Richedit Wörteraustauschen

Ein Thema von Reini64 · begonnen am 13. Jul 2004 · letzter Beitrag vom 15. Jul 2004
Antwort Antwort
Reini64

Registriert seit: 3. Mär 2004
Ort: Ulmen
83 Beiträge
 
#1

Richedit Wörteraustauschen

  Alt 13. Jul 2004, 22:54
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:
  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;
Nach diesen Durchgang sind zwar die Einträge geändert worden ab die Formatierung ist weg.

Was mach ich falsch, wie wäre es richtig ?

Dank für Eure Unterstüzung
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Richedit Wörteraustauschen

  Alt 14. Jul 2004, 13:19
Schau dir mal stringreplace an, das spart viel Arbeit

stringreplace(Richedit1.Text,'&&name','Hans Müller');
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: Richedit Wörteraustauschen

  Alt 14. Jul 2004, 17:54
@Reini64: Einmal den Thread zu eröffnen reicht vollkommen. Der andere ist gelöscht

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Richedit Wörteraustauschen

  Alt 14. Jul 2004, 18:39
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:
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;
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.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von p0w3r5tr34m3r
p0w3r5tr34m3r

Registriert seit: 18. Aug 2003
Ort: Monheim am Rhein
153 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: Richedit Wörteraustauschen

  Alt 15. Jul 2004, 05:50
such ma bei torry.net nach TSuperMask..
dann haste weniger code, aber gleiches result

Powerstreamer
Florian Cülter
ich bin ein notorischer alles-klein-schreiber!

der 100. Beitrag nach 3 Jahren 25 Wochen und einem Tag
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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