Einzelnen Beitrag anzeigen

Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Linien zeichnen in TRichEdit mit TShape ??

  Alt 27. Jan 2010, 09:55
Ich hab das jetzt vom Ansatz her etwas anders gelöst, keine Ahnung, ob es besonders elegant ist, aber es funktioniert offensichtlich.

Das RichEdit habe ich in einer ScrollBox platziert. Und in dieser Scrollbox erzeuge ich zur Laufzeit als visuelle Begrenzungslinien für die im Richedit gesetzten Ränder vier Panele von entweder 1 px Breite (senkrechte Linien) oder 1 px Höhe (waagerechte Linien).

Die Panele werden über das Richedit gezeichnet und beeinflussen das RichEdit überhaupt nicht, so dass der Text wieder ganz normal sichtbar ist.

Das ganze hatte ich vorher mit TBevel bzw. TShape in der Scrollbox versucht, was aber beides nicht funktioniert hat, da sowohl Bevel als auch Shape hinter dem Richedit gezeichnet wurden, während das Panel vor dem RichEdit erscheint.

Hier noch der Code:

Delphi-Quellcode:
procedure TForm11.PaintBorders(var R : TRect);
var bLine : TPanel;
    I : integer;
begin
//Textränder als graue Linie jeweils 1 Pixel außerhalb der gesetzten Ränder anzeigen
for I := 1 to 4 do
   begin
   bLine := TPanel.Create(ScrollBox1);
   with bLine do
      begin
      Parent := ScrollBox1;
      Name := 'bLine' + IntTostr(I);
      Caption := '';
      Ctl3D := False;
      Color := $e0e0e0;
      BevelInner := bvNone;
      BevelOuter := bvNone;
      if I < 3 then
         begin
         //waagerechte Linien
         Height := 1;
         Width := R.Right - R.Left + 30;
         Left := RichEdit1.Left + R.Left - 15;
         end
      else
         begin
         //senkrechte Linien
         Width := 1;
         Top := RichEdit1.Top + R.Top - 15;
         Height := R.Bottom - R.Top + 30;
         end;
      case I of
         1: Top := RichEdit1.Top + R.Top - 1;
         2: Top := RichEdit1.Top + R.Bottom + 1;
         3: Left := RichEdit1.Left + R.Left - 1;
         4: Left := RichEdit1.Left + R.Right + 1;
         end;
      end;
   end;
end;
Steffen
Steffen
  Mit Zitat antworten Zitat