Hallo, ich hole dieses Thema noch mal hervor, weil jetzt eine andere Lösung habe. Vielleicht interessiert es ja jemanden.
Meine oben genannte Lösung mit den geschützten Absatzmarken-Zeichen im Richedit lief unter Delphi 10.2 nicht mehr korrekt. Hier wurden teilweise die falschen Zeichen geschützt und beim Tippen kam alles durcheinander. Habe erst lange nach der Ursache gesucht und verfolge jetzt einen ganz anderen Ansatz:
Die Absatzmarken werden nicht in den RichEdit.Text eingebaut, sondern einfach auf einen Canvas drübergemalt. Dann reicht auch ein einfaches TMemo.
Delphi-Quellcode:
procedure TMyForm.PaintParagraphMarks;
var i:integer;
th:integer;
tw:integer;
yText:integer;
Canvas: TControlCanvas;
const cParagraphMark = #0182;
begin
if not fShowParagraphs then
exit;
Canvas := TControlCanvas.Create;
try
Canvas.Control := Memo;
Canvas.Font.Assign(Memo.Font);
th:=Canvas.TextHeight('X');
yText:=0;
for i := 0 to Memo.Lines.Count do begin
tw:=Canvas.TextWidth(Memo.Lines[i]);
Canvas.TextOut(tw+5, yText, cParagraphMark);
yText:=yText+th;
end;
finally
Canvas.Free;
end;
end;
Das wird dann im OnKeyup des Memo aufgerufen.
Vorteil: Der Memo.Text bleibt unverändert. Man muss die Absatzmarken da nicht mehr umständlich entfernen.