请问如何实现窗体玻璃透明(不是“镂空”)的效果(200分)

  • 主题发起人 主题发起人 zjhjp
  • 开始时间 开始时间
Z

zjhjp

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现在一幅图像上面可以任意手绘的效果,但不破坏原图像。而且原图像可以拖动,类似央视二台早间的“马斌读报”。在网上找了一些窗体透明的效果,基本上是镂空或拷贝底图的,不符合我的目的。我希望就象透明玻璃一样的,虽然窗体是透明的,但我还是可以在上面实现鼠标画线、擦除等,我加上的其它控件不透明(如加一个退出按钮),不对下面的图像作任何处理。
 
两个Image空间,在上面一个的canvas中画啊画!西西!
 
就是两个图层的问题,类似于photoshop图像处理中的概念。

两个image重叠放置,image1在上,Image2在下:
procedure TForm1.FormCreate(Sender: TObject);
begin
image2.Transparent:=true;
image2.Canvas.Pen.Color:=clRed;
image2.Canvas.MoveTo(20,20);
image2.Canvas.LineTo(50,20);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Transparent:=true;
image1.Canva.brush.style:=bsclear;
image1.Canvas.Pen.Color:=clblue;
image1.Canvas.MoveTo(20,20);
image1.Canvas.LineTo(20,50);
end;
 
试试下面的方法:
//设置窗体透明
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0, 128, 2);//SetLayeredWindowAttributes(Handle, 0, 128, 1);

写在窗体的OnCreate事件中。
 
看看这个http://www.momo99.net/soft/momosetup.exe
 
TO wql,子瑜:感谢二位兄弟的回复,我试试效果感觉并不好,因为我还要拖动下面的一层,我采用的是两个窗体,其中透明的窗体在上面的方法,窗体透明的方法是在FormCreate中加入如下代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
self.Color:= $00FCFCFC;
self.TransparentColor:=true;
self.TransparentColorValue:= self.Color;
end;
这样窗体是透明了,但无法在上面绘画(我指的是在onMouseDown里按下鼠标左键绘画),但是,如果我在上面加一个按钮,加上如下语句可以:
procedure TForm1.Button1Click(Sender: TObject);
begin
canvas.Brush.Color:=clBlue;
canvas.Pen.Width:=4;
canvas.Pen.Color:=clred;
canvas.Rectangle(10,10,50,50);
end;
这样可以绘画了,但只要窗体改变一下大小(resize),所画的内容就清空了,无法做到跟窗体一起移动的效果.


To szhcracker:
这个方法可以将窗体透明,但是上面的控件及绘制的图形也一起透明了
 
http://www.2ccc.com:8080/plus/view.php?aid=4401
 
所画的内容就清空了!

嘿嘿!就连Windows也一样被清空,你天天看到不被晴空是因为
所有的Windows窗口都有一个wm_paint事件!
 
多人接受答案了。
 
后退
顶部