关于窗口嵌入桌面及透明的注意事项
2012-02-23 10:59
441 查看
附件:透明窗体
这几天在做个东东,需要将窗体嵌入桌面及窗口透明
开始我以为以我现在的所知应该没什么大问题,结果也的确如此,没什么大问题,只是细节上出了几个小问题...Windows.SetParent(Handle, FindWindow('Progman', 'Program Manager'));
2. 关于透明
第一个想到的是 Layered Window
需要注意的是窗口样式 ExStyle 必须包含 WS_EX_LAYERED(0x80000),而且在 CreateParams 里指定无效...
然后使用 SetLayeredWindowAttributes 设置透明度,关于这个函数网上有很多问题,这里不在赘述
执行时我发现我的窗口并没有被透明,SetLayeredWindowAttributes 返回 False
于是我估计还是跟窗体的 Style 有关系(因为我的窗口 BorderStyle=bsNone)
果然,在 CreateParams 里给窗体加上 WS_POPUP 后透明成功~鼓掌~~
不过这样窗口虽然透明了可是窗体里控件也跟着透明了...procedure TSubForm.CreateParams(var Params: TCreateParams);
2begin
3 inherited;
4 with Params do Style := Style or WS_POPUP;
5end;
6
7procedure TSubForm.FormCreate(Sender: TObject);
8begin
9 UpdateStyle;
10end;
11
12procedure TSubForm.UpdateStyle;
13begin
14 SetWindowLong(Handle, GWL_EXSTYLE,
15 GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
16 if Assigned(SetLayeredWindowAttributes) then
17 SetLayeredWindowAttributes(Handle, 0, 128, LWA_ALPHA);
18end;
19复制代码// 好久不用 D,都忘光了。。。
// D7以上直接使用 Form 的 AlphaBlend/AlphaBlendValue 或者 TransparentColor/TransparentColorVale 即可实现透明
// 其实最终还是用 SetLayeredWindowAttributes 实现的
1procedure TSubForm.CreateParams(var Params: TCreateParams);
2begin
3 inherited;
4 with Params do ExStyle := ExStyle or WS_EX_TRANSPARENT;
5end;复制代码
看清这世界的美丽与残酷
这几天在做个东东,需要将窗体嵌入桌面及窗口透明
开始我以为以我现在的所知应该没什么大问题,结果也的确如此,没什么大问题,只是细节上出了几个小问题...Windows.SetParent(Handle, FindWindow('Progman', 'Program Manager'));
2. 关于透明
第一个想到的是 Layered Window
需要注意的是窗口样式 ExStyle 必须包含 WS_EX_LAYERED(0x80000),而且在 CreateParams 里指定无效...
然后使用 SetLayeredWindowAttributes 设置透明度,关于这个函数网上有很多问题,这里不在赘述
执行时我发现我的窗口并没有被透明,SetLayeredWindowAttributes 返回 False
于是我估计还是跟窗体的 Style 有关系(因为我的窗口 BorderStyle=bsNone)
果然,在 CreateParams 里给窗体加上 WS_POPUP 后透明成功~鼓掌~~
不过这样窗口虽然透明了可是窗体里控件也跟着透明了...procedure TSubForm.CreateParams(var Params: TCreateParams);
2begin
3 inherited;
4 with Params do Style := Style or WS_POPUP;
5end;
6
7procedure TSubForm.FormCreate(Sender: TObject);
8begin
9 UpdateStyle;
10end;
11
12procedure TSubForm.UpdateStyle;
13begin
14 SetWindowLong(Handle, GWL_EXSTYLE,
15 GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
16 if Assigned(SetLayeredWindowAttributes) then
17 SetLayeredWindowAttributes(Handle, 0, 128, LWA_ALPHA);
18end;
19复制代码// 好久不用 D,都忘光了。。。
// D7以上直接使用 Form 的 AlphaBlend/AlphaBlendValue 或者 TransparentColor/TransparentColorVale 即可实现透明
// 其实最终还是用 SetLayeredWindowAttributes 实现的
1procedure TSubForm.CreateParams(var Params: TCreateParams);
2begin
3 inherited;
4 with Params do ExStyle := ExStyle or WS_EX_TRANSPARENT;
5end;复制代码
看清这世界的美丽与残酷
相关文章推荐
- 关于窗口嵌入桌面及透明的注意事项
- 关于窗口嵌入桌面及透明的注意事项
- 关于窗体透明的注意事项
- 关于窗口嵌入桌面显示(桌面提示)
- 关于模式窗口的注意事项
- 关于带图片的TextView-代码更改图片位置注意事项
- 关于CS plus for CC 的使用以及注意事项
- 关于Azure存储账户中存储虚拟机VHD文件的注意事项
- 关于maven配置pom.xml的小注意事项(provided)
- 关于网格比较工具metro使用的几点注意事项
- 整理:windows2003记录远程桌面连接登录日志的方法及注意事项
- 关于SQLServer的若干注意事项
- 关于IO流中异常的注意事项
- SSH框架整合时applicationContext.xml的配置,关于在main方法中测试注意的事项
- 关于pgpool的注意事项
- 关于Trojan.DL.Win32.Autorun类病毒的杀毒操作注意事项
- 关于分支和主干Merge时要注意的事项
- 关于block使用的5点注意事项
- 关于dealloc 注意事项
- NSIS制作卸载器时注意事项和如何创建桌面快捷方式