怎么制作不规则的界面?请给出原码!谢谢 (10分)

  • 主题发起人 主题发起人 kenwoo
  • 开始时间 开始时间
K

kenwoo

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么制作不规则的界面?请给出原码!

to:macrolen
我的EMAIL:kenwoo@263.net
 
如:
procedure TForm1.FormCreate(Sender: TObject);
var
hRegion: THandle;
begin
hRegion := CreateRoundRectRgn(0,0,width,height,40,40);
SetWindowRgn(Handle, hRegion, True);
end;
你可以自己去寻找其他的函数,不一一举例了
 
如果有一个不规则的图片pic.bmp,怎么将它做成界面?
 
下载一个控件
 
什么控件呢?
 
找相应的控件
 
我有一个原代码,要么?要的话把E-MAIL留下![:D]
 
用skinEngin控件,是个相当不错的界面控件。

www.51delphi.com上有下载
 
用位图就行了,截图:http://mantousoft.51.net/document/3_rgnform.gif
源码在此下载:http://mantousoft.51.net/document/3_rgnform.rar
 
这是以前找得一个以文字为界面得例子
procedure TForm1.FormCreate;
var
rgn: HRGN;
begin
BeginPath(Canvas.Handle);
SetBkMode(Canvas.Handle, TRANSPARENT);
Canvas.Font.Name := '宋体';
Canvas.Font.Size := 200;
Canvas.TextOut(20, 20, '漂亮吗?'); //用"漂亮吗?"作为form的形状
EndPath(Canvas.Handle);
rgn := PathToRegion(Canvas.Handle);
SetWindowRgn(Handle, rgn, true);
end;
 
如果要作简单的不规则的窗体界面,Redbreast的回答就已经足够了,如果要达到够cool够绚的效果,
网上则有很多这样的控件.打个比方,在delphi窑洞中有一组套件叫作1stclass,里面有例子的
效果较好,你可以参考参考(51delphi.com)
 
To yzhshi:你真的好棒哦!還有沒有這種代碼?能否把源碼賜給我!
Email:hyhxzy@weihuashoes.com.cn,謝謝!
 
呵呵,很多都是从大富翁中摘出来的,暂时保存在Mybase的文件中,其实我想每个人都会有一些。
我想等成熟以后发出来大家共享,估计一到两个月以后吧。只要时间允许。
 
推荐你一本书,虽然写的不是很好,但是你要的上面都有,还有其他的。。。
《特效视窗-Delphi开发高级界面实例》
人民邮电出版社
 
什么控件都不要,在delphi6中在窗体上放一个image,然后把窗体的transparentcolor属性
设成true,transparentcolorvalue设成图片的背景即可

另外,设置alphablend和alphablendvalue可以得到半透明的窗体

很酷的,记得,这是delphi6的特性哦!
 
一行代码都不要写!呵呵[:D]
 
试试下面代码:在form.creat中调用shape函数
TForm1::shape(TImage* a)
{HRGN r1,r2;
int x,y,s,e;
TColor a0;

a0=a->Canvas->Pixels[0][0];
r1=CreateRectRgn(0,0,0,0);
for (y=1;y<=a->Height;y++) //
{
x=0;s=0;e=0;
//do
while (x<=a->Width)
{x=x+1;
while ((a->Canvas->Pixels[x][y]==a0)&amp;&amp;(x<a->Width))
x=x+1;
s=x;
while ((a->Canvas->Pixels[x][y]!=a0)&amp;&amp;(x<a->Width))
x=x+1;
e=x;

if (s<=e)
{
r2=CreateRectRgn(s,y,e,y+1);
CombineRgn(r1,r1,r2,RGN_OR);
}
}//do
// while (x>a->Width);
}//for
DeleteObject(r2) ;
SetWindowRgn(Handle,r1,true);
return(true);
}
 
在窗体上放一个按钮,然后试试这个:
procedure TForm1.Button1Click(Sender: TObject);
var hr1,hr2,hr3,hr4,hr5 : HRGN;
begin
if button1.Caption='Get Holes' then
begin
hr1 := CreateRectRgn(0, 0, form1.Width, form1.height);
hr2 := CreateRectRgn(25, 30, 155, 105);
hr3 := CreateRectRgn(165, 30, 295, 105);
hr4 := CreateRectRgn(25, 115, 155, 190);
hr5 := CreateRectRgn(165, 115, 295, 190);
CombineRgn(hr1, hr1, hr2, RGN_DIFF);
CombineRgn(hr1, hr1, hr3, RGN_DIFF);
CombineRgn(hr1, hr1, hr4, RGN_DIFF);
CombineRgn(hr1, hr1, hr5, RGN_DIFF);
SetWindowRgn(Form1.Handle, hr1, True);
button1.Caption:='No Holes';
end
else if button1.Caption='No Holes' then
begin
hr1:=CreateRectRgn(0, 0, form1.Width, form1.Height);
SetWindowRgn(form1.Handle, hr1, true);
button1.Caption:='Get Holes';
end;
end;
跟顶层的Redbreast方法一致,主要就是使用
CreateRectRgn和SetWindowRgn两个函数,但是如果比较复杂的形状,可以使用
CombineRgn来对不同的形状的交集进行集合操作,出现不同的效果。
 
后退
顶部