本人专门为zzw作了以下的通用函数, 试试调用一下,正好能够解决你的问题。
procedure Display( Canvas : TCanvas; bmp : TBitmap; rect : TRect );
//功能:以逆时针方向逐渐显示一幅位图.
//Canvas : 窗口的Canvas;
//bmp : 待显示的位图;
//rect : 显示区域
var
i, a, b, x0, y0, x, y : Integer;
d : Extended;
r : TRect;
Membmp : TBitmap;
begin
a := ( rect.right - rect.left ) div 2; //椭圆横轴
b := ( rect.bottom - rect.top ) div 2; //椭圆纵轴
x0 := rect.Left + a; //椭圆中心
y0 := rect.Top + b; //
r.Left := 0;
r.Top := 0;
r.Right := 2 * a;
r.Bottom := 2 * b;
Membmp := TBitmap.Create; //建立等大的内存位图
Membmp.Width := 2 * a;
Membmp.Height := 2 * b;
Membmp.Canvas.Brush.Color := clBlack; //涂黑
Membmp.Canvas.FillRect( r );
Membmp.Canvas.Brush.Color := clWhite;
for i := 1 to 36 do
begin
d := i / 18 * 3.1415926;
x := x0 + Round( a * Cos( d ) );
y := y0 - Round( b * Sin( d ) );
//用白色画扇形
if ( i = 36 ) then
Membmp.Canvas.Ellipse( x0 - a, y0 - b, x0 + a, y0 + b )
else
Membmp.Canvas.Pie( x0 - a, y0 - b, x0 + a, y0 + b, x0 + a, y0, x, y );
Membmp.Canvas.CopyMode := cmSrcAnd;
//显示位图的扇形区域
Membmp.Canvas.CopyRect( r, bmp.Canvas, r );
Canvas.CopyRect( rect, Membmp.Canvas, r );
end;
Membmp.Free;
end;