如何生成半透明窗口?(100分)

  • 主题发起人 主题发起人 小小菜虫
  • 开始时间 开始时间

小小菜虫

Unregistered / Unconfirmed
GUEST, unregistred user!
如何才能生成WINDOW关闭系统时这种半透明的窗口?
 
在windows2000下:<br><br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;<br><br>const<br>&nbsp; WS_EX_LAYERED = $80000;<br>&nbsp; AC_SRC_OVER = $0;<br>&nbsp; AC_SRC_ALPHA = $1;<br>&nbsp; AC_SRC_NO_PREMULT_ALPHA = $1;<br>&nbsp; AC_SRC_NO_ALPHA = $2;<br>&nbsp; AC_DST_NO_PREMULT_ALPHA = $10;<br>&nbsp; AC_DST_NO_ALPHA = $20;<br>&nbsp; LWA_COLORKEY = $1;<br>&nbsp; LWA_ALPHA = $2;<br>&nbsp; ULW_COLORKEY = $1<br>&nbsp; ULW_ALPHA = $2<br>&nbsp; ULW_OPAQUE = $4<br><br>//新增加的常量定义<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp; private<br>&nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; { Public declarations }<br>&nbsp; end;<br><br>function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; <br>&nbsp; &nbsp; &nbsp; bAlpha:byte; dwFlags:longint ):longint; stdcall; external user32;//函数声明<br><br>var<br><br>Form1: TForm1;<br><br>implementation<br><br>{$R *.DFM}<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>var l:longint;<br>begin<br>&nbsp; l:=getWindowLong(Handle, GWL_EXSTYLE);<br>&nbsp; l := l Or WS_EX_LAYERED;<br>&nbsp; SetWindowLong (handle, GWL_EXSTYLE, l);<br>&nbsp; SetLayeredWindowAttributes (handle, 0, 180, LWA_ALPHA);<br>//第二个参数是指定透明颜色<br><br>//第二个参数为0则使用第四个参数设置alpha值,从0到255<br><br>end;<br><br>end.<br>
 
98下怎么做?
 
基本原理是:<br>&nbsp; 在窗口显示前其获取背景图然后对背景图象进行滤镜效果处理再将处理过的背景图象<br>显示在窗口前面。 有一种方法是:首先,做出一个透明窗体,然后在窗体上添加一个shape,<br>将其扩展至全屏幕,将shape的pen的mode属性设为pmmask,pen的style属性设为psclear,<br>最后改变brush的color属性即可。 因为没有api支持,win9x下只能模拟,效果不太好,<br>就象金山词霸的取词窗口,背景改变而窗体上还是不变。但我们可以利用timer控件来解决<br>窗体的刷新率和时时更新的问题。 不过听说“金山词霸的半透明窗口效果只能在带mmx指令集的处理器中才起作用”
 
虽然没有彻底解决, 我还是要感谢您。谢谢您的答复!!!!!<br>马上送分。
 
unit FineForm;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp; &nbsp; procedure FormDblClick(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.DFM}<br>//这个程序有点问题,当字体大过窗体的范围的时候就不能全部显示!<br>procedure TForm1.FormCreate(Sender: TObject);<br>var rgn:HRGN;<br>begin<br>&nbsp;Form1.Color:=clRed;//color<br>&nbsp;BeginPath(Canvas.handle);<br>&nbsp; SetBkMode(Canvas.Handle,TRANSPARENT);<br>&nbsp; Canvas.Font.Name:='宋体';//font<br>&nbsp; Canvas.Font.Size:=100;//font size<br>&nbsp; Canvas.TextOut(12,12,'I Love You!');<br>&nbsp;Endpath(Canvas.Handle);<br>&nbsp;rgn:=PathtoRegion(Canvas.Handle);<br>&nbsp;SetWindowRgn(Handle,rgn,true);<br>end;<br><br>procedure TForm1.FormDblClick(Sender: TObject);<br>begin<br>&nbsp;Close;<br>end;<br><br>end.<br>
 
taozhiyu:<br>大哥您可能是误会了我的意思, 我的意思是窗口是半透明色的:)<br>谢谢。
 
半透明之后,是不是窗体上所有东东都是关透明的???<br>如果是用Form.AlphaBlendValue不就可以了!!!
 
Form.AlphaBlendValue<br><br>不能用,怎么用呢,
 
后退
顶部