如何实现半透明窗体及半透明图片?

qinic 2001-09-29 06:32:26
...全文
239 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
HiddingEye 2001-10-01
  • 打赏
  • 举报
回复
用ALPHABLEND应该也可以啊!我去试试!好用的话!贴上来给大家试试看!
咚咚咚咚咚咚 2001-09-30
  • 打赏
  • 举报
回复
WS_EX_LAYERED
LWA_ALPHA
的值是多少啊?
咚咚咚咚咚咚 2001-09-30
  • 打赏
  • 举报
回复
WS_EX_LAYERED = $00080000
LWA_ALPHA = $00000002
flayyao 2001-09-29
  • 打赏
  • 举报
回复
在vertscollbar中选择style为flat类型即可,给我分我会告诉你更多
Nizvoo 2001-09-29
  • 打赏
  • 举报
回复
这个我不会,是来学习的。
不介意吧。
多多交流 共同进步。
hantao 2001-09-29
  • 打赏
  • 举报
回复
gz
seeking 2001-09-29
  • 打赏
  • 举报
回复
win98中如何?
韩小明 2001-09-29
  • 打赏
  • 举报
回复
procedure DoTrans()

var
l: LongInt;
begin
l := GetWindowLong(Handle, GWL_EXSTYLE);
l := l or WS_EX_LAYERED;
SetWindowLong(Handle, GWL_EXSTYLE, l);

SetLayeredWindowAttributes(Handle, 0, 125, LWA_ALPHA);
end;

先试一试好用么?应该没什么问题,不错吧?

来,我们分析一下这个函数

这里最重要的是API函数SetLayeredWindowAttributes(),它的功能就是设置一个分层式Windows窗口的透明核不透明效果。其函数原型为:

BOOL SetLayeredWindowAttributes(
HWND hwnd, // handle to the layered window
COLORREF >crKey, // specifies the color key
BYTE bAlpha, // value for the blend function
DWORD dwFlags // action
);
(从msdn里抄来的)这个API来自User32.dll,且只有windows2000以上版本才支持。Delphi6封装了这个API,如果你用的是Delphi5就要自己写上一句:

function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external ‘user32.dll';

进行函数声明了。


现在来分析一下这个函数的参数:

第一个参数: HWND, 是指向一个分层式(Layered)窗口的句柄。就是说你要处理的窗口要具有WS_EX_LAYERED属性;

第二个参数:COLORREF是指定透明色的颜色值。这个效果要和第四个参数一起用,即当第四个参数为LWA_COLORKEY时才有用,这样如果窗体上有与指定颜色相同的点就会被透明,甚至是一个被镂空的效果。如果第四个参数为LWA_ALPHA,这个只好象没用,一般设置为0;

第三个参数:是一个字节值,由于指定不透明的值,实际上就是透明度。0最透明,都看不到了,255最不透明,和平常效果一样。

第四个参数:只有两个值:LWA_COLORKEY,和LWA_ALPHA,用于表明透明效果的运算规则。一般用LWA_ALPHA。

没了,就这么多了。更多的msdn里都有。

zds0707 2001-09-29
  • 打赏
  • 举报
回复
UP

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧