public<br> procedure TM;<br> ……<br> //实现透明的过程代码<br>procedure TForm1.TM;<br>var<br> FormRgn,ClientRgn,CtrlRgn:Thandle;<br> ControlA:Tcontrol;<br> Margin,X,Y,CtrlX,CtrlY,I:integer;<br>begin<br> //得到Form的边界的宽<br> Margin:=(Width-ClientWidth)div 2;<br> //得到Form的区域的句柄<br> FormRgn:=CreateRectRgn(0,0,width,height);<br> //从Form区域中减去Client区<br> X:=Margin;<br> Y:=Height-ClientHeight-Margin;<br> ClientRgn:=CreateRectRgn(X,Y,X+ClientWidth,Y+ClientHeight);<br> CombineRgn(FormRgn,FormRgn,ClientRgn,RGN_DIFF);<br> //取出Client区中的所有控件<br> for I:=0 to ControlCount-1 do // ControlCount是控件个数,由0开始<br> begin<br> ControlA:=Controls;//Controls子控件列表<br> if (ControlA is TWinControl) or (ControlA is TGraphicControl)then<br> with ControlA do<br> begin<br> if visible then<br> begin<br> CtrlX:=X+Left;<br> CtrlY:=Y+Top;<br> CtrlRgn:=CreateRectRgn(CtrlX,CtrlY,CtrlX+Width,CtrlY+Height);<br> CombineRgn(FormRgn,FormRgn,CtrlRgn,RGN_OR);<br> end;<br> end;<br> end;<br> //重绘Form<br> SetWindowRgn(handle,FormRgn,True);<br>end;<br> <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>