高分求解半透明窗体(UpdateLayeredWindow)时子控件显示问题!

i8dea 2006-10-31 05:02:20
我现在使用UpdateLayeredWindow后,png图片做的窗体显示出来了,可form上的子控件却看不见了,不过依然存在,而且也响应相应的事件,我现在想请教高手,如何才能把子控件show出来啊。
我搜索到的一些答案似乎不起作用:
1. 子控件paintTo
2. 在UpdateLayeredWindow调用前,先调用SetLayeredWindowAttributes,把子控件显示出来
这两个方法我都没有试验成功,也许是我的方法不对,还请高人指点一下,谢谢!
...全文
950 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
i8dea 2006-12-27
  • 打赏
  • 举报
回复
楼上的好像是做异形窗口的代码啊???好像和题目不相符啊。
zhengsq007 2006-12-27
  • 打赏
  • 举报
回复
procedure TForm1.DoInvisible;
var
AControl : TControl;
A, Margin, X, Y, CtlX, CtlY : Integer;
begin
Margin := ( Width - ClientWidth ) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn( X, Y, X + ClientWidth, Y + ClientHeight );
CombineRgn( FullRgn, FullRgn, ClientRgn, RGN_DIFF );
for A := 0 to ControlCount - 1 do begin
AControl := Controls[A];
if ( AControl is TWinControl ) or ( AControl is TGraphicControl )
then with AControl do begin
if Visible then begin
CtlX := X + Left;
CtlY := Y + Top;
CtlRgn := CreateRectRgn( CtlX, CtlY, CtlX + Width, CtlY + Height );
CombineRgn( FullRgn, FullRgn, CtlRgn, RGN_OR );
end;
end;
end;
SetWindowRgn(Handle, FullRgn, TRUE);
以前写的函数,搂主参考下
yi10000 2006-12-27
  • 打赏
  • 举报
回复
楼主不好意思,我刚试试过不行,:(
yi10000 2006-12-27
  • 打赏
  • 举报
回复
楼主爽快,哈哈...
yi10000 2006-12-27
  • 打赏
  • 举报
回复
窗体一:透明,
窗体二:嵌入窗体一中,
将子控件放入窗体二中.
i8dea 2006-12-27
  • 打赏
  • 举报
回复
再顶一次,如果没有解决方案了,就开始分分了。
miky 2006-12-27
  • 打赏
  • 举报
回复
无法显示的, 等VISTA再试试吧!

现在只能自己在窗体上直接画
123ppmove 2006-11-08
  • 打赏
  • 举报
回复
关注;
Xjh338 2006-11-07
  • 打赏
  • 举报
回复
我也遇到过你的情况,关注一下。

我没有找到解决方法,我只是新建多一个form2出来,把窗体2的边全部去掉,再两个叠加,同步移动。
i8dea 2006-11-02
  • 打赏
  • 举报
回复
没有人清楚吗???

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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