Ich muss gleich mal nachfragen...
Warum wird lRgn3 im geänderten Beispiel nicht zugewiesen?
Ich möchte die aktuelle Clipping-Region sichern und diese später wieder herstellen.
Die aktuelle Clipping-Region wird ja innerhalb von ExtSelectClipRgn verarbeitet.
Genau diese möchte ich in einer Region speichern und dachte, dafür wäre GetClipRgn da...?
Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
var
lRect : TRect;
lRgn1, lRgn2, lRgn3: Cardinal;
begin
lRgn1 := 0;
lRgn2 := 0;
lRgn3 := 0;
Canvas.FillRect(ClientRect);
lRect := TRect.Create(100, 100, 200, 200);
Canvas.Brush.Color := clYellow;
Canvas.FillRect(lRect);
lRect := TRect.Create(200, 200, 300, 300);
Canvas.Brush.Color := clBlue;
Canvas.FillRect(lRect);
lRgn1 := CreateRectRgn(150, 150, 250, 250);
SelectClipRgn(Canvas.Handle, lRgn1);
GetClipRgn(Canvas.Handle, lRgn3); // tmp
Canvas.Brush.Color := clGreen;
Canvas.FillRect(ClientRect);
GetClipRgn(Canvas.Handle, lRgn3); // tmp
lRgn2 := CreateRectRgn(160, 160, 260, 260);
ExtSelectClipRgn(Canvas.Handle, lRgn2, RGN_OR);
Canvas.Brush.Color := clRed;
Canvas.FillRect(ClientRect);
GetClipRgn(Canvas.Handle, lRgn3); // <-- Warum wird lRgn3 nicht die aktuelle Clip-Region des Canvas zugewiesen?
lRgn2 := CreateRectRgn(16, 16, 26, 26);
SelectClipRgn(Canvas.Handle, lRgn2);
Canvas.Brush.Color := clTeal;
Canvas.FillRect(ClientRect);
SelectClipRgn(Canvas.Handle, lRgn3); // <-- Hier sollte die gesicherte Clip-Region wieder asgewählt werden!
Canvas.Brush.Color := clNavy;
Canvas.FillRect(ClientRect);
DeleteObject(lRgn1);
DeleteObject(lRgn2);
SelectClipRgn(Canvas.Handle, HRGN(nil));
Canvas.Brush.Color := clBtnFace;
Canvas.FillRect(ClientRect);
end;