//创建一个椭圆形剪裁区域,
  ARgn := CreateEllipticRgn(0,0,Form1.Width,Form1.Height);
  //根据剪裁区域形状设置窗体形状。
  SetWindowRgn(Form1.Handle, ARgn, True);
  //释放剪裁区域
  DeleteObject(ARgn);

解决方案 »

  1.   

    你见过这样屏幕保护程序的效果吗?屏幕中央出现一个圆形区域,区域中是一幅图,随着圆形区域的逐渐扩大,这幅图便画满了整个屏幕,另一种效果相反,是以圆形逐渐缩小的方式来显现的,Windows的Blt函数都是基于矩形拷贝的,没有其它多边形的拷贝,所以实现这一效果肯定是用剪裁区域一类的方法来做的。
      

  2.   

    Apollo47: 我看上面这段代码有点像我刚才贴给另一位兄台的代码,我们的思路可真接近啊,嘻嘻。
      

  3.   

    Image 是没有 Handle 属性,也就不能有 SetWindowRgn()直接设置它的形状,但可以用Panel 控件。 用panel 把 image 遮住,通过设置的 panel 形状达到效果。
      

  4.   

    Apollo47: 这个思路真好!但用Panel不太方便,它没有Canvas,我不能在上面画图,也许得自己定制一个控件才行。
      

  5.   

    我在大富翁上看了方法,当然,这个方法没有利用Panel之类的TWinControl。var
    Bmp :TBitmap;
    FRgn :HRGN;
    begin
    Bmp :=TBitmap.Create;
    Bmp.PixelFormat :=Image1.Picture.Bitmap.PixelFormat;
    Bmp.Width :=100;
    Bmp.Height :=100;BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,Image1.Canvas.Handle,80,
    80,SRCCOPY); //要拷贝的位图
    FRgn :=CreateEllipticRgn(0,0,100,100); //创建圆形区域
    SelectClipRgn(Image1.Canvas.Handle,FRgn); //选择剪切区域
    Image1.Canvas.Draw(0,0,Bmp); //位图位于区域内的部分加载
    Bmp.Free;
    DeleteObject(FRgn);
    end;原发贴者是“卷起千堆雪tyn”。