在窗体上放一个Button1 1 仅让Button1这个区域 是透明的
2 仅Button1这个区域 鼠标可以穿透 请问题如何实现
请出代码 注
 眼睛护士 有个功能是 屏幕关灯功能 就是本例要实现的能点到Form1的窗体后面的东西 即桌面上的东西 但只限在Button1的窗体后面
效果如图
控件穿透 透明

解决方案 »

  1.   

    核心代码在此了:procedure TForm1.SetRgn;
    var
        FullRgn,   ClientRgn,   ButtonRgn:   THandle;
        Margin,   X,   Y:   Integer;
        tp1, tp2 : TPoint;
        function MakeRgn(c:TControl):THandle;
        var tp,tp2:TPoint;x,y:Integer;
        begin
          tp1 := Point(Left,top);
          tp := c.ClientToScreen(Point(0,0));
          x := tp.X-tp1.X;
          y := tp.Y-tp1.Y;
          Result:=CreateRectRgn(x,y,x+c.Width,y+c.Height);
        end;
    begin
        //边框宽度
        Margin   :=   (Width   -   ClientWidth)   div   2;
        //整个区域
        FullRgn   :=   CreateRectRgn(0,   0,   Width,   Height);
        //中心区域
        ClientRgn   := MakeRgn(button1);
        //裁剪区域
        CombineRgn(FullRgn,   FullRgn,   ClientRgn,   RGN_DIFF);
        SetWindowRgn(Handle,   FullRgn,   True);
    end;procedure TForm1.FormResize(Sender: TObject);
    begin
        setrgn;
    end;
      

  2.   

    楼上给的是对的,那不一定是个Button,本质是就是在窗口上挖个洞而已.在洞外边套什么控件都可以