Filling a region draws it off canvas

Posted by Xanyx on Stack Overflow See other posts from Stack Overflow or by Xanyx
Published on 2010-06-10T02:23:07Z Indexed on 2010/06/10 2:32 UTC
Read the original article Hit count: 190

Filed under:

Hi

Using the following code in Delphi 2007:


procedure TfrmTest.PaintBox1Paint(Sender: TObject);
const
  Rect_Size = 10;
begin
  PaintBox1.Canvas.Brush.Color := clYellow;
  PaintBox1.Canvas.FillRect(Rect(0, 0, PaintBox1.width, PaintBox1.height));

  PaintBox1.Canvas.Brush.Color := clRed;
  DrawARect(PaintBox1.Canvas, 0, 0, Rect_Size, Rect_Size);
end;

procedure TfrmTest.DrawARect(ACanvas: TCanvas; iLeft, iTop, iWidth, iHeight: Integer);
var
  rgnMain: HRGN;
begin
  rgnMain := CreateRectRgn(iLeft, iTop, iLeft + iWidth, iTop + iHeight);
  try
    SelectClipRgn(ACanvas.handle, rgnMain);
    ACanvas.FillRect(ACanvas.ClipRect);
    SelectClipRgn(ACanvas.handle, 0);
  finally
    DeleteObject(rgnMain);
  end;
end;

I get this: (Yellow area shows boundaries of PaintBox1).

HMMM, NOT ALLOWED TO POST IMAGE Please go to: http://www.freeimagehosting.net/uploads/62cf687d29.jpg

(Linked image shows a form with a yellow box [PaintBox1] in the center. However my red rectange [rgnMain] has been drawn at pos 0,0 on the form)

My expectation was that the red rectangle would be at the top left of the PaintBox1 canvas, not the form's canvas. Why is it not? Can regions only be used with controls that have a Windows handle?

Thanks

© Stack Overflow or respective owner

Related posts about delphi