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