B beachboy Unregistered / Unconfirmed GUEST, unregistred user! 2000-04-12 #1 在软件开发中,我们经常看到一些奇形怪状的窗体,比如圆形等等. 在Delphi中如何实现?
X xWolf Unregistered / Unconfirmed GUEST, unregistred user! 2000-04-12 #3 // 一个椭圆形窗体 OnResize中放同样的代码 procedure TForm1.FormCreate(Sender: TObject); var hRegion: THandle; begin hRegion := CreateEllipticRgn(0, -Height, Width, Height); SetWindowRgn(Handle, hRegion, True); end;
// 一个椭圆形窗体 OnResize中放同样的代码 procedure TForm1.FormCreate(Sender: TObject); var hRegion: THandle; begin hRegion := CreateEllipticRgn(0, -Height, Width, Height); SetWindowRgn(Handle, hRegion, True); end;
W wjiachun Unregistered / Unconfirmed GUEST, unregistred user! 2000-04-12 #4 呵呵,用SetWindowRgn // 一个圆角矩形窗体 procedure TForm1.FormCreate(Sender: TObject); var hRegion: THandle; begin hRegion := CreateEllipticRgn(0,0,width,height,20,20); SetWindowRgn(Handle, hRegion, True); end;
呵呵,用SetWindowRgn // 一个圆角矩形窗体 procedure TForm1.FormCreate(Sender: TObject); var hRegion: THandle; begin hRegion := CreateEllipticRgn(0,0,width,height,20,20); SetWindowRgn(Handle, hRegion, True); end;
C cch_b Unregistered / Unconfirmed GUEST, unregistred user! 2000-04-18 #7 在LMD控控件组中有一个FormShape控件,用它就行了,它还可以用 BMP文件生成窗体的形式,如果你安装了LMD控件组,那么它就在 LMD SYS 这一页上。自己去试试吧,很好用的。
B beachboy Unregistered / Unconfirmed GUEST, unregistred user! 2000-05-12 #8 问题回答的不是很详细,其实,不规则窗体可以由现存的控件完成
S SuperMMX Unregistered / Unconfirmed GUEST, unregistred user! 2000-05-14 #9 不行的,只能用 Region, to Billy: 只有一句话值得用控件吗?
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2000-05-14 #10 //圆形窗体.使用SetWindowRgn //需要在OnResize中放同样的代码 procedure TForm1.FormCreate(Sender: TObject); const RC = 160;//圆半径 var x,y: Real; a: Integer; rgn: HRGN; p: array[0..max] of TPoint; begin for a := 0 to 359do //一整圈 begin x := RC * cos(a * 2 * PI / 360) + RC; //计算横坐标 y := RC - RC * sin(a * 2 * PI / 360); //计算纵坐标 p[a].x := Trunc(x); //将坐标保存于数组p中 p[a].y := Trunc; end; //根据数组p创建一个多边形 rgn := CreatePolygonRgn( p, max+1, WINDING ); //根据多边形设置窗口形状 SetWindowRgn( Handle, rgn, True ); end;
//圆形窗体.使用SetWindowRgn //需要在OnResize中放同样的代码 procedure TForm1.FormCreate(Sender: TObject); const RC = 160;//圆半径 var x,y: Real; a: Integer; rgn: HRGN; p: array[0..max] of TPoint; begin for a := 0 to 359do //一整圈 begin x := RC * cos(a * 2 * PI / 360) + RC; //计算横坐标 y := RC - RC * sin(a * 2 * PI / 360); //计算纵坐标 p[a].x := Trunc(x); //将坐标保存于数组p中 p[a].y := Trunc; end; //根据数组p创建一个多边形 rgn := CreatePolygonRgn( p, max+1, WINDING ); //根据多边形设置窗口形状 SetWindowRgn( Handle, rgn, True ); end;
B Billy Unregistered / Unconfirmed GUEST, unregistred user! 2000-05-14 #11 TO SuperMMX 如果人家要的是奇形怪状的窗体一句话恐怕搞不定吧。。。
E elan Unregistered / Unconfirmed GUEST, unregistred user! 2000-05-14 #12 其实大家现在说的都是非矩形的规则窗体而已,如果是非常不规则的窗体呢,改怎么办?
S SuperMMX Unregistered / Unconfirmed GUEST, unregistred user! 2000-05-15 #13 呵呵, 20句应该可以了, 可以用 CreatePolygonRgn CreatePolyPolygonRgn 任你怎么不规则,