首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

DELPHI 怎么让鼠标穿透控件

2013-11-19 
DELPHI 如何让鼠标穿透控件在窗体上放一个Button1 1 仅让Button1这个区域 是透明的2 仅Button1这个区域 鼠

DELPHI 如何让鼠标穿透控件
在窗体上放一个Button1 

1 仅让Button1这个区域 是透明的
2 仅Button1这个区域 鼠标可以穿透 

请问题如何实现
请出代码 


 眼睛护士 有个功能是 屏幕关灯功能 就是本例要实现的

能点到Form1的窗体后面的东西 即桌面上的东西 但只限在Button1的窗体后面
效果如图
DELPHI 怎么让鼠标穿透控件 控件穿透?透明
[解决办法]
核心代码在此了:

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;

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

热点排行