关于UpdateLayeredWindow的疑问???如果有一张32位的bitmap图片,透明度都初始好了,那么用这个函数,能根据不同的像素透明度显示出来一个背景透明的窗体吗主要是为了边缘平滑无锯齿的异形窗口

解决方案 »

  1.   

    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);