![]() |
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 ;-) |
hmm,
das Programm schaufelt eh Daten ins Clipboard und die eghen weiter nach Word, daher ist das Clipboard eh in gebrauch. Ausserdem war mir nicht ganz klar wie ich das sonst handlen soll, also hab ich es mal übers Clipboard realisiert um zu sehen wie, bzw. ob überhaupt, es funktioniert.Ich hab noch ein Paar probleme damit aebr es wird langsam.
|
Re: RichEdit , Text ersetzen aber Formate erhalten
Du kannst die Zwischenablage ja vorher "sichern", dann deine SAchen reinschieben und wieder die alte Zwischenablage herstellen. Das wäre denke ich wesentlich besser...
Ich sichere mir zb kurzzeitug meinen DelphiSource darin, wenn ich was ausprobieren möchte...Es gibt zwar noch ne Rückgängig-Funktion, aber wenn man dann mal auf Speichern kommt....:mrgreen: |
Re: RichEdit , Text ersetzen aber Formate erhalten
Moin Joel,
Zitat:
Vielleicht kannst Du Dir ja mit einer Temp Datei behelfen, oder einem MemoryStream. |
hmm,
ihr verkennt die Situation, das sind gewachsene Strukturen, die ich nur weiterbetreue, die sind nicht von mir, darum will ich ja den Wordkram ablösen und im rtf Format weiterentwickeln. Das ganze dann irgenwann Datenbankbasierend, ohne irgendwelche M$ Komponenten irgendeiner Art, naja aber da ich noch nichts mit den Richtextboxen gemacht hab war es heute einfach nur ein Versuch. Mir is auch klar dass dies nicht der Weissheit letzter Schluss ist, es sind quasi empierische Versuche mich in die Materie einzuarbeiten.
Trotzdem, wer Tips hat oder Anleitunen Tutorials, links zum Thema RTF und Delphi(4) dem bin ich sehr dankbar ! |
Re: RichEdit , Text ersetzen aber Formate erhalten
Moin Joel,
okay, das kann man fast schon gelten lassen :D Was meinst Du mit Tutorials zum Thema RTF? Das Format kannst Du Dir bei ![]() Ausserdem hält auch das PSDK so manche Information bereit was mit RichEdit so möglich ist, aber bei Delphi nicht implementiert wurde, teilweise weil es das bei der jeweilgen Version noch nicht gab. |
AW: RichEdit , Text ersetzen aber Formate erhalten
Hy das ist zwar ein alter Code aber ich war mit der Lösung nicht glücklich. Hatten ja einige vorher schon geschrieben. Hier meine Lösung ohne Hilfs RTF
Delphi-Quellcode:
///////////////////////// ERSETZE IM RTF ////////////////////////////////
procedure ersetzeText(myrtf:TRichEdit;finden,ersetzen:String); var position, lf, le : integer; attrib : TTextattributes; begin lf := length(finden); le := length(ersetzen); if pos(finden,myrtf.text) > 0 then Begin myrtf.SelStart := pos(finden,myrtf.text)-1; myrtf.SelLength := lf; attrib := myrtf.SelAttributes; myrtf.SelText := ersetzen; myrtf.SelLength := le; myrtf.SelAttributes := attrib; End; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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