分享

窗体淡入淡出效果

 aaie_ 2011-11-25
核心API函数就是SetLayeredWindowAttributes,以下的控件代码是为窗口实现淡入淡出效果而设计,通过编程时动态改变AlphaValue值,您就可以看到效果了。

unit   TranForm;         {DragonPC   2001.2.21   }

interface

uses
    Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs;

type
    TTranForm   =   class(TComponent)
    private
        FAlphaValue   :   integer   ;
        FHandle   :   HWND   ;
        procedure   SetFAlphaValue(Alpha:integer)   ;
    protected
        procedure   UpdateDisplay   ;
    public
        constructor   Create(AOwner:   TComponent);   override;
    published
        property   AlphaValue   :   integer   read   FAlphaValue   write   SetFAlphaValue   ;
    end;

procedure   Register;

function   SetLayeredWindowAttributes
        (Handle   :   HWND;   COLORKEY   :   COLORREF;   Alpha   :   BYTE;   Flags   :   DWORD)   :
Boolean;
        stdcall;   external   'USER32.DLL ';

implementation

procedure   Register;
begin
    RegisterComponents( 'Standard ',   [TTranForm]);
end;

{   TTranForm   }
procedure   TTranForm.SetFAlphaValue(Alpha:   integer);
begin
    if   (Alpha   > =   0)   and   (Alpha   <   256)   then   begin
        FAlphaValue   :=   Alpha   ;
        UpdateDisplay()   ;
    end   else
        ShowMessage( '请输入0~255之间的值! ')   ;
end;

procedure   TTranForm.UpdateDisplay;
begin
    if   not   (csDesigning   in   ComponentState)   then
        SetLayeredWindowAttributes(FHandle,   0,   FAlphaValue,   2);

end;

constructor   TTranForm.Create(AOwner:   TComponent);
begin
    inherited;
    FAlphaValue   :=   255   ;
    FHandle   :=   TForm(Owner).Handle   ;
    if   not   (csDesigning   in   ComponentState)   then
        SetWindowLong(FHandle,GWL_EXSTYLE,   GetWindowLong(FHandle,   GWL_EXSTYLE   )
or   $80000   );

end;

end.

**************
const  
    WS_EX_LAYERED   =   $80000;
    AC_SRC_OVER   =   $0;
    AC_SRC_ALPHA   =   $1;
    AC_SRC_NO_PREMULT_ALPHA   =   $1;
    AC_SRC_NO_ALPHA   =   $2;
    AC_DST_NO_PREMULT_ALPHA   =   $10;
    AC_DST_NO_ALPHA   =   $20;
    LWA_COLORKEY   =   $1;
    LWA_ALPHA   =   $2;
    ULW_COLORKEY   =   $1
    ULW_ALPHA   =   $2
    ULW_OPAQUE   =   $4
//新增加的常量定义
function   SetLayeredWindowAttributes(hwnd:HWND;   crKey:Longint;   bAlpha:byte;   dwFlags:longint   ):longint;   stdcall;   external   user32;//函数声明


procedure   TForm1.FormCreate(Sender:   TObject);
var   l:longint;
begin
        l:=getWindowLong(Handle,   GWL_EXSTYLE);
        l   :=   l   Or   WS_EX_LAYERED;
        SetWindowLong   (handle,   GWL_EXSTYLE,   l);
        SetLayeredWindowAttributes   (handle,   0,   180,   LWA_ALPHA);
//第二个参数是指定透明颜色
//第二个参数为0则使用第四个参数设置alpha值,从0到255,其他的我不太清楚,因为没有api帮助
end;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多