Einzelnen Beitrag anzeigen

Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#1

SelectClipRgn funktioniert nicht in Paint/OnPaint?

  Alt 31. Jan 2010, 20:51
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?) ...
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat