![]() |
StringReplace will nicht?
Folgendes Problem.
Ich möchte gerne BBCode aus Memo1 ersetzen und in Memo2 schreiben lassen:
Delphi-Quellcode:
Aber irgentwie will nur das in der markierten Zeile funktionieren, das drüber und drunter geht nicht
procedure TForm1.Check(sMemo: TMemo);
var nMemo: String; begin nMemo := sMemo.Lines.Text; Memo2.Lines.Text := StringReplace(nMemo, '[color=', '<font color=#', [rfReplaceAll, rfIgnoreCase]); Memo2.Lines.Text := StringReplace(nMemo, '[b]', '[b]', [rfReplaceAll]); Memo2.Lines.Text := StringReplace(nMemo, '[/b]', '[/b]', [rfReplaceAll]); // HIER LoadHTMLToWebbrowser(WebBrowser1, SynMemo2.Lines); end; |
Re: StringReplace will nicht?
Du musst schon immer nMEmo als Ergebnis von Stringreplace verwenden und erst am Ende dies dem Memo2 zuweisen.
|
Re: StringReplace will nicht?
Das verstehe ich jetzt nicht so ganz :?
Edit: Achso, der Aufruf von Check ist dieser:
Delphi-Quellcode:
Check(Memo1);
|
Re: StringReplace will nicht?
Stringreplace ist eine Funktion. Im Ergebnis kommt der String, in dem der Austausch durchgeführt wurde ;)
Wenn Du also einfach nur so Stringreplace ausführst, passiert nichts, es sei denn Du weist das Ergebnis einem String zu. Sherlock |
Re: StringReplace will nicht?
Verstehe ich immernoch nicht :wall:
Macht man das nciht so? Das ERGEBNIS dem MEMO zuweisen? :oops: |
Re: StringReplace will nicht?
Delphi-Quellcode:
nMemo := sMemo.Lines.Text;
nMemo:= //ändern StringReplace(nMemo, '[color=', '<font color=#', [rfReplaceAll, rfIgnoreCase]); nMemo := //ändern StringReplace(nMemo, '[b]', '[b]', [rfReplaceAll]); nMemo := //ändern StringReplace(nMemo, '[/b]', '[/b]', [rfReplaceAll]); // HIER Memo2.lines.text:=nMemo; //neu |
Re: StringReplace will nicht?
Ich nutze mal die Delphi-Hilfe zur Erklärung:
Zitat:
Edit: Eigentlich machst Dus ja richtig...ich bin raus. Das Problem ist die Zuweisung an das Memo...SORRY!! Sherlock |
Re: StringReplace will nicht?
Zitat:
Er ersetzt jedesmal den Text von nMemo, d.h. nur die letzte Ersetzung steht abschließend in Memo2. Also entweder wie sirius sagt, das Ergebnis immer nMeom zuweisen und dieses am Schluß an Memo2, oder immer Memo2.Text an StringReplace übergeben (außer beim ersten Mal). |
Re: StringReplace will nicht?
So, sry jetzt hab ich endlich den Kopf frei. Wenn man von allen Seiten (hier zuhaus) zugequatscht wird bekomtm man nix mehr hin.
Mitlerweile habe ich es verstanden und MEINEN DENKFEHLER auch gefunden :oops: |
Re: StringReplace will nicht?
Hab da aber schon ein neues Problem, was ich nicht geregelt bekomme
Folgender Code steht im OnChange des Memo1
Delphi-Quellcode:
Wenn ich jetzt auf einen Button klicke und zuvor einen Farbe aus dem JvColorButton ausgewählt habe,
Memo1.Lines.Text :=
StringReplace(Memo1.Lines.Text, '[color='+ ColorToHex(JvColorButton1.Color)+']', '<font color=#'+ ColorToHex(JvColorButton1.Color)+'>', [rfReplaceAll, rfIgnoreCase]); Memo1.Lines.Text := StringReplace(Memo1.Lines.Text, '[/color]', '</font>', [rfReplaceAll, rfIgnoreCase]); Memo2.Lines.Text := Memo1.Lines.Text; wird diese auch ordnungsgemäß hinzugefügt. Im WebBrowser stimmt auch die Farbe. Führe ich dies jedoch ein zweites Mal aus, so setzt er den 2. Text in die richtige Farbe, aber den ersten wieder in "Schwarz" ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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