关于动态创建透明窗体的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 零度
  • 开始时间 开始时间

零度

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在已知窗体中,创建一个新的透明窗体,具体步骤如下:

首先建立一个工程,在Form1上,放一个Panel,并且置顶,再在Panel上,放一个PaintBox,位与Panel内,并且PaintBox.Align := alClient.再在窗体上放一个Botton,在BottonClick实践中创建一个新的Form,并实现透明,代码如下:
var myForm : TForm;

procedure TForm1.ButtonClick(Sender : TOBject);
begin
myForm := TForm.Create(PaintBox1);//注意是PaintBox
myForm.Parent := PaintBox1.Parent;
myForm.Color := clRed;
myForm.TransparentColor := True;
myForm.TransparentColorValue := clRed;//设置透明色为红色
myForm.FormStyle := fsStayOnTop;
myForm.Show;
end;

现在问题是,当我把这段代码,放在我自己的一类模块中运行时,Form不能透明;第二,当我独立运行这段程序时,透明过头,也就是说,能看到整个应用后面的东西,而我所希望的只是要透明新建立的Form,而能看到Panel上的东西。
是否有其他办法解决这个问题,或者说不考虑用Form,用别的控键或方法,而能在PaintBox上建立个独立的透明层呢,同要具备Canvas的特性??
 
我想在已知窗体中,创建一个新的透明窗体,具体步骤如下:

首先建立一个工程,在Form1上,放一个Panel,并且置顶,再在Panel上,放一个PaintBox,位与Panel内,并且PaintBox.Align := alClient.再在窗体上放一个Botton,在BottonClick实践中创建一个新的Form,并实现透明,代码如下:
var myForm : TForm;

procedure TForm1.ButtonClick(Sender : TOBject);
begin
myForm := TForm.Create(PaintBox1);//注意是PaintBox
myForm.Parent := PaintBox1.Parent;
myForm.Color := clRed;
myForm.TransparentColor := True;
myForm.TransparentColorValue := clRed;//设置透明色为红色
myForm.FormStyle := fsStayOnTop;
myForm.Show;
end;

现在问题是,当我把这段代码,放在我自己的一类模块中运行时,Form不能透明;第二,当我独立运行这段程序时,透明过头,也就是说,能看到整个应用后面的东西,而我所希望的只是要透明新建立的Form,而能看到Panel上的东西。
是否有其他办法解决这个问题,或者说不考虑用Form,用别的控键或方法,而能在PaintBox上建立个独立的透明层呢,同要具备Canvas的特性??
 
你可试一下BF控件组,那个对透明控制还是很好的
 
AlphaBlend

2000以上的操作系统可以设置Form的AlphaBlend为True,AlphaBlendValue为透明度,最大255不透明,0全部透明,看看效果吧:)
 
app2001 : 什么意思,BF控键组是什么意思??

chenybin :这个我明白,不过会仍然透明到后面,我的意思,不透过本身主窗体,即Form1。
 
简单一点说一下我的目的吧:
实现创建的PaintBox就相当于一画板,我可以在上面放一张图片,我需要另一个透明层,在改透明层上,我可以任意的加载其他的图片或写文字,而使得文字能透明叠加在Paintbox的图片上,这一叠加过程,是在用户使用时,二次开发用的,所以透明层是动态创建的!
 
感觉和Canvas的Brush的Style有关,bsClear
还是Bitblt的最后一个参数?
我想楼主可能是想作一个类似GIS二次开发平台的东西,有些用VC作的是把View做为指针传进来,然后控制这个View的,楼主的做法是想把PaintBox做为底图,然后在Form上做用户图层。个人看法

太难了,说不好,等高手吧
 
是的,就是这个意思,我已经实现了在一层上的图形绘制,而且可以兼容时钟、Flash和视频,问题就出现在Flash和视频和文字的叠加上,如果在同一层,不断刷新的时钟、Flash和视频,会始终在最上面,而达不到文字叠加的效果。我也试过用Label来做个图层,可是Label之间不能互相叠加,效果不好,所以又考虑用动态创建Form的方法,可是透明又有问题,有人说用透明的Panel来做图层,可是我又不会做,真是麻烦~
 
app大虾刚回过一个帖子,是说透明panel的,我找找

ttp://www.delphibbs.com/delphibbs/dispq.asp?LID=3197317

好像是这个,参考一下吧
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1659077
嗬嗬!自己看看吧!应该能用上!
 
看了app2001提供的透明Panel,不知道怎么弄,没有dcu啊??

为什么我创建的Form,如果不指定parent,就能透明,而当我指定了Parent为Panel时,就不能透明了呢???
 
用了app大虾提供的控键,完成了,唯一的缺点,没有Canvas属性,还要在上面另外创建一个Label,以实现绘图的过程,不过这个控键仍然很好用,谢谢各位的帮助,谢谢~~[:D]
 
后退
顶部