请问如何实现透明窗口(能在delphi5中实现) (10分)

  • 主题发起人 主题发起人 小唐
  • 开始时间 开始时间

小唐

Unregistered / Unconfirmed
GUEST, unregistred user!
brush.style :bsClear;<br>borderStyle :=bsNone;<br>只能静态地透明,只要一移动窗口,窗口就不再透明了。<br>该怎样使该窗口在移动后也能再变得透明啊?
 
请大家帮助,分不够可再加。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=544802
 
实现windows2000半透明窗体<br>function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; <br>&nbsp;dwFlags:longint ):longint; stdcall; external user32;<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>var <br>l:longint;<br>begin<br>&nbsp; l:=getWindowLong(Handle, GWL_EXSTYLE);<br>&nbsp; l := l Or $80000;<br>&nbsp; SetWindowLong (handle, GWL_EXSTYLE, l);<br>&nbsp; SetLayeredWindowAttributes(handle, 0, 180, 2);<br>end;
 
SetLayeredWindowAttributes只能在2000/XP中实现透明窗体
 
搜索下家伙,到处都有,很富是吧,分给我
 
&nbsp;public<br>&nbsp; &nbsp; procedure TM;<br>&nbsp; &nbsp; ……<br>&nbsp;//实现透明的过程代码<br>procedure TForm1.TM;<br>var<br>&nbsp; &nbsp;FormRgn,ClientRgn,CtrlRgn:Thandle;<br>&nbsp; &nbsp;ControlA:Tcontrol;<br>&nbsp; &nbsp;Margin,X,Y,CtrlX,CtrlY,I:integer;<br>begin<br>&nbsp; //得到Form的边界的宽<br>&nbsp;Margin:=(Width-ClientWidth)div 2;<br>&nbsp; //得到Form的区域的句柄<br>&nbsp;FormRgn:=CreateRectRgn(0,0,width,height);<br>&nbsp; //从Form区域中减去Client区<br>&nbsp;X:=Margin;<br>&nbsp;Y:=Height-ClientHeight-Margin;<br>&nbsp;ClientRgn:=CreateRectRgn(X,Y,X+ClientWidth,Y+ClientHeight);<br>&nbsp;CombineRgn(FormRgn,FormRgn,ClientRgn,RGN_DIFF);<br>&nbsp; //取出Client区中的所有控件<br>&nbsp; for I:=0 to ControlCount-1 do // ControlCount是控件个数,由0开始<br>&nbsp; &nbsp;begin<br>&nbsp; &nbsp;ControlA:=Controls;//Controls子控件列表<br>&nbsp; &nbsp;if (ControlA is TWinControl) or (ControlA is TGraphicControl)then<br>&nbsp; &nbsp; &nbsp;with ControlA do<br>&nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp;if visible then<br>&nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp;CtrlX:=X+Left;<br>&nbsp; &nbsp; &nbsp;CtrlY:=Y+Top;<br>&nbsp; &nbsp; &nbsp;CtrlRgn:=CreateRectRgn(CtrlX,CtrlY,CtrlX+Width,CtrlY+Height);<br>&nbsp; &nbsp; &nbsp;CombineRgn(FormRgn,FormRgn,CtrlRgn,RGN_OR);<br>&nbsp; &nbsp; &nbsp;end;<br>&nbsp; &nbsp; &nbsp;end;<br>&nbsp; &nbsp;end;<br>&nbsp; //重绘Form<br>&nbsp;SetWindowRgn(handle,FormRgn,True);<br>end;<br>&nbsp;<br>//取消透明<br>procedure TForm1.Button1Click(Sender: TObject);<br>Var FormRgn:Thandle;<br>begin<br>FormRgn:=CreateRectRgn(0,0,width,height);<br>SetWindowRgn(handle,FormRgn,True);<br>end;<br><br><br>
 
后退
顶部