非标准窗体(100分)

  • 主题发起人 主题发起人 beachboy
  • 开始时间 开始时间
B

beachboy

Unregistered / Unconfirmed
GUEST, unregistred user!
在软件开发中,我们经常看到一些奇形怪状的窗体,比如圆形等等.
在Delphi中如何实现?
 
检索以前的问题.用win api实现.
 
// 一个椭圆形窗体 OnResize中放同样的代码
procedure TForm1.FormCreate(Sender: TObject);
var
hRegion: THandle;
begin
hRegion := CreateEllipticRgn(0, -Height, Width, Height);
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;
 
直接用控件算了,网上有很多的。
 
我也很想知道。各位大虾,帮帮忙啦!
 
在LMD控控件组中有一个FormShape控件,用它就行了,它还可以用
BMP文件生成窗体的形式,如果你安装了LMD控件组,那么它就在
LMD SYS 这一页上。自己去试试吧,很好用的。
 
问题回答的不是很详细,其实,不规则窗体可以由现存的控件完成
 
不行的,只能用 Region,
to Billy:
只有一句话值得用控件吗?
 
//圆形窗体.使用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(y);
end;
//根据数组p创建一个多边形
rgn := CreatePolygonRgn( p, max+1, WINDING );
//根据多边形设置窗口形状
SetWindowRgn( Handle, rgn, True );
end;
 
TO SuperMMX
如果人家要的是奇形怪状的窗体一句话恐怕搞不定吧。。。
 
其实大家现在说的都是非矩形的规则窗体而已,如果是非常不规则的窗体呢,改怎么办?
 
呵呵, 20句应该可以了,
可以用 CreatePolygonRgn CreatePolyPolygonRgn
任你怎么不规则,
 
多人接受答案了。
 
后退
顶部