![]() |
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 ? |
Re: RichEdit , Text ersetzen aber Formate erhalten
ich hab mal hier einen Versuch gestartet
Delphi-Quellcode:
Ersetzen tut er es aber leider ist der neu Text nicht im selben Format wie der ersetzte.
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; 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 ! |
Re: RichEdit , Text ersetzen aber Formate erhalten
Moin Joel,
hast Du auch mal versucht SelAttributes zu speichern und wiederherzustellen? |
Re: RichEdit , Text ersetzen aber Formate erhalten
ich lauf gerade in die richtung aber irgendwie hab ich mich wohl verzettelt :(
momentaner Codestand
Delphi-Quellcode:
Irgendwie verwechsle ich da was :(
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; |
Re: RichEdit , Text ersetzen aber Formate erhalten
Moin Joel,
warum nimmst Du denn hier DefAttributes?
Delphi-Quellcode:
attrib := bildschirmrtf.DefAttributes;
|
Re: RichEdit , Text ersetzen aber Formate erhalten
Weil ich gerne die Attribute des selektierten Textes haben will.
|
Re: RichEdit , Text ersetzen aber Formate erhalten
Moin Joel,
deshalb ja auch SelAttributes und nicht DefAttributes. |
hmm,
aber selattributes ist doch zu setzen da oder verstehe ich die Hilfe falsch ? Aber wie auch immer auch dies brigt irgendwie nix :(
|
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; |
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 14:36 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