Hallo zusammen!
Ich hab mal wieder an einer Komponente gebastelt. Sie besteht aus einem Rahmenbereich und dessen Innenleben. Beim Malen (im überschriebenen Paint) wollte ich dann einen Clipping-Bereich verwenden um das Überschreiben des Randes zu verhindern. Aber sobald ich das mache, wird gar nichts mehr ausgegeben. Also habe ich das ganze mal in eine PaintBox verlagert und komme da zum selben Ergebnis:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
R: TRect;
iRgn: Integer;
begin
PaintBox1.Canvas.Pen.Color := clBlue;
PaintBox1.Canvas.MoveTo(0,0);
PaintBox1.Canvas.LineTo(PaintBox1.Width, PaintBox1.Height); // blaue linie v. links oben nach rechts unten ... funktioniert
R := PaintBox1.ClientRect;
InflateRect(R, -10, -10);
iRgn := CreateRectRgnIndirect(R);
SelectClipRgn(PaintBox1.Canvas.Handle, iRgn); // ab hier ist alles vorbei (wird diese Zeile auskommentiert geht auch die 2. linie)
DeleteObject(iRgn);
PaintBox1.Canvas.Pen.Color := clRed;
PaintBox1.Canvas.MoveTo(PaintBox1.Width, 0);
PaintBox1.Canvas.LineTo(0, PaintBox1.Height); //rote line bleibt unsichtbar (sollte nur "kürzer" sein)
end;
Die rote Linie sollte nicht ganz bis "aussen" gehen, weil sie in der inneren Box geclippt wird, aber leider geht da gar nichts und ich bin mal wieder komplett ratlos
Mache ich da was falsch? Geht das so etwa nicht (setzen einer Clipping-Region innerhalb von WM_PAINT?) ...