Einzelnen Beitrag anzeigen

bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#10

AW: Absatzmarken in TMemo

  Alt 12. Dez 2019, 09:10
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.
  Mit Zitat antworten Zitat