Delphi-PRAXiS
Seite 1 von 2  1 2      

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 RichEdit , Text ersetzen aber Formate erhalten (https://www.delphipraxis.net/6632-richedit-text-ersetzen-aber-formate-erhalten.html)

JoelH 17. Jul 2003 10:30


RichEdit , Text ersetzen aber Formate erhalten
 
Kann mir jemand einen Tip geben wie man in einem RTF-Text am einfachsten Wörter ersetzt ohne das die Formatierung des restlichen Textes zerstört wird ?

Konkretes Problem, ichhabe eine Wordvorlage mit Makro, das will ich komplett ersetzen indem ich das File als RTF abspeichere und dann Delphi die Sachen ersezten lasse die vorher das Wordmakro ersetzt hat,
zB. einfach '<<Adresse1>>' durch 'Jonas' ersetzen.

Wie mach ich dass am besten ?

JoelH 17. Jul 2003 10:57

Re: RichEdit , Text ersetzen aber Formate erhalten
 
ich hab mal hier einen Versuch gestartet
Delphi-Quellcode:
procedure Tform2.ersetzeText(bildschirmrtf:TRichEdit;finden,ersetzen:String);
var position, lf, le : integer;
    helprtf : TRichEdit;
begin
  helprtf := TRichEdit.Create(self);
  helprtf.parent := bildschirmrtf.Parent;
  lf := length(finden);
  le := length(ersetzen);
  helprtf.Text := ersetzen;
  helprtf.SelStart := pos(ersetzen,helprtf.text)-1;
  helprtf.SelLength := le;
  helprtf.CutToClipboard;
  bildschirmrtf.SelStart := pos(finden,bildschirmrtf.text)-1;
  bildschirmrtf.SelLength := lf;
  bildschirmrtf.PasteFromClipboard;
  helprtf.destroy;
end;
Ersetzen tut er es aber leider ist der neu Text nicht im selben Format wie der ersetzte.
Wie kann ich die diese Formatatribute am besten zwischenspeichern und dann wieder zurückschreiben ? Vor allem weil ja die Textlängen verschieden sein können !

Christian Seehase 17. Jul 2003 11:16

Re: RichEdit , Text ersetzen aber Formate erhalten
 
Moin Joel,

hast Du auch mal versucht SelAttributes zu speichern und wiederherzustellen?

JoelH 17. Jul 2003 11:23

Re: RichEdit , Text ersetzen aber Formate erhalten
 
ich lauf gerade in die richtung aber irgendwie hab ich mich wohl verzettelt :(
momentaner Codestand
Delphi-Quellcode:
procedure Tform2.ersetzeText(bildschirmrtf:TRichEdit;finden,ersetzen:String);
var position, lf, le : integer;
    helprtf : TRichEdit;
    attrib : TTextattributes;
begin
  helprtf := TRichEdit.Create(self);
  helprtf.parent := bildschirmrtf.Parent;
  lf := length(finden);
  le := length(ersetzen);
  bildschirmrtf.SelStart := pos(finden,bildschirmrtf.text)-1;
  bildschirmrtf.SelLength := lf;
  attrib := bildschirmrtf.DefAttributes;
  helprtf.Text := ersetzen;
  helprtf.SelStart := pos(ersetzen,helprtf.text)-1;
  helprtf.SelLength := le;
  helprtf.SelAttributes := attrib;
  helprtf.CutToClipboard;
  bildschirmrtf.DefAttributes := attrib;
  bildschirmrtf.PasteFromClipboard;
  bildschirmrtf.SelStart := pos(ersetzen,bildschirmrtf.text)-1;
  bildschirmrtf.SelLength := le;
 
  helprtf.destroy;
end;
Irgendwie verwechsle ich da was :(

Christian Seehase 17. Jul 2003 11:25

Re: RichEdit , Text ersetzen aber Formate erhalten
 
Moin Joel,

warum nimmst Du denn hier DefAttributes?

Delphi-Quellcode:
attrib := bildschirmrtf.DefAttributes;

JoelH 17. Jul 2003 11:45

Re: RichEdit , Text ersetzen aber Formate erhalten
 
Weil ich gerne die Attribute des selektierten Textes haben will.

Christian Seehase 17. Jul 2003 11:46

Re: RichEdit , Text ersetzen aber Formate erhalten
 
Moin Joel,

deshalb ja auch SelAttributes und nicht DefAttributes.

JoelH 17. Jul 2003 12:31

hmm,
 
aber selattributes ist doch zu setzen da oder verstehe ich die Hilfe falsch ? Aber wie auch immer auch dies brigt irgendwie nix :(

JoelH 17. Jul 2003 13:05

hmm,
 
Jipee,

es geht jetzt, ich dacht schon ich bin doof. Hatte mich wohl etas mit dem Def und Sel verzettelt. Die OnlineHilfe dazu ist aber auch mau.

Delphi-Quellcode:
procedure Tform2.ersetzeText(bildschirmrtf:TRichEdit;finden,ersetzen:String);
var position, lf, le : integer;
    helprtf : TRichEdit;
    attrib : TTextattributes;
begin
  helprtf := TRichEdit.Create(self);
  helprtf.parent := bildschirmrtf.Parent;
  lf := length(finden);
  le := length(ersetzen);
  helprtf.Clear;
  bildschirmrtf.SelStart := pos(finden,bildschirmrtf.text)-1;
  bildschirmrtf.SelLength := lf;
  attrib := bildschirmrtf.SelAttributes;
  helprtf.Lines.add(ersetzen);
  helprtf.SelAttributes := attrib;
  helprtf.SelStart := pos(ersetzen,helprtf.text)-1;
  helprtf.SelLength := le;
  helprtf.SelAttributes.Size := attrib.size;
  helprtf.SelAttributes.Name := attrib.Name;
  helprtf.CopyToClipboard;
  bildschirmrtf.PasteFromClipboard;
  bildschirmrtf.SelStart := pos(ersetzen,bildschirmrtf.text)-1;
  bildschirmrtf.SelLength := le;
  bildschirmrtf.SelAttributes := attrib;
  helprtf.destroy;
end;

Christian Seehase 17. Jul 2003 13:57

Re: RichEdit , Text ersetzen aber Formate erhalten
 
Moin Joel,

mir ist im Moment nicht ganz klar, wozu Du ein zweites RichEdit brauchst, wenn Du sowieso Text und Attribute getrennt sicherst.
Ausserdem halte ich es für nicht besonders sauber den Austausch über das Clipboard vorzunehmen.

Eine Anwendung die mir ungefragt den Inhalt des ClipBoards zerschiesst hätte auf meinem Rechner keine grosse Überlebenschance ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr.
Seite 1 von 2  1 2      

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