本例效果图:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormPaint(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} const BoolStr: array[Boolean] of string = ('矩形不在区域中', '矩形在区域中'); var Rgn: HRGN; Rect: TRect; procedure TForm1.FormCreate(Sender: TObject); const n = 50; var x1,y1,x2,y2: Integer; begin x1 := n; y1 := n div 2; x2 := ClientWidth - n; y2 := ClientHeight - n; Rgn := CreateEllipticRgn(x1, y1, x2, y2); Rect := Bounds(10,10,10,10); end; procedure TForm1.Button1Click(Sender: TObject); begin OffsetRect(Rect, 10, 6); Repaint; Text := BoolStr[RectInRegion(Rgn, Rect)]; end; procedure TForm1.Button2Click(Sender: TObject); begin OffsetRect(Rect, -10, -6); Repaint; Text := BoolStr[RectInRegion(Rgn, Rect)]; end; procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Brush.Color := clSilver; Canvas.Brush.Style := bsCross; FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle); Canvas.Brush.Color := clRed; Canvas.Brush.Style := bsSolid; FrameRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle, 2, 2); FillRect(Canvas.Handle, Rect, Canvas.Brush.Handle); end; procedure TForm1.FormDestroy(Sender: TObject); begin DeleteObject(Rgn); end; end.