本例效果图:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var f: Boolean; procedure TForm1.FormClick(Sender: TObject); const n = 50; var Rgn: HRGN; x1,y1,x2,y2: Integer; begin Repaint; x1 := n; y1 := n div 2; x2 := ClientWidth - n; y2 := ClientHeight - n; {建立椭圆区域} Rgn := CreateEllipticRgn(x1, y1, x2, y2); {转换为矩形区域 - 谈不上是转换, 是重新定制了一个矩形区域, 只是用了原来的区域句柄而已} if f then SetRectRgn(Rgn, 11, 11, 111, 111); f := not f; {绘制区域} 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); DeleteObject(Rgn); end; end.