如何实现瑞星那样淡入淡出的程序启动界面?

解决方案 »

  1.   

    使用AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags);
        dwFlags:
    AW_SLIDE
    AW_ACTIVATE
    AW_BLEND
    AW_HIDE
    AW_CENTER
    AW_HOR_POSITIVE    水平从左到右
    AW_HOR_NEGATIVE    水平从右到左
    AW_VER_POSITIVE    垂直从左到右
    AW_VER_NEGATIVE    垂直从右到左
    比如:
    AnimateWindow(handle,400,AW_BLEND or AW_ACTIVATE)    淡入
             AW_BLEND or $00010000  淡出
             AW_HIDE or Random(16)+1     随机
    当然,还可以利用form中的alphablend属性,自己研究吧!
      

  2.   

    http://expert.csdn.net/Expert/topic/1072/1072133.xml?temp=.1311762这里有你要的答案!!
      

  3.   

    借个地盘问一下:
    to:一楼的这个函数在win98有效吗?
    To:二楼的你的这个帖子在win98下试过吗?
      

  4.   

    核心API函数就是SetLayeredWindowAttributes,以下的控件代码是为窗口实现淡入淡出效果而设计,通过编程时动态改变AlphaValue值,您就可以看到效果了。unit TranForm;    {DragonPC 2001.2.21 }interfaceuses
      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';implementationprocedure 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。
    end;
    ////////////////////
    看看这个98好使不好使!
      

  5.   

    AnimateWindow只能用于2000和NT,XP下
    9x里面不能用AnimateWindow
      

  6.   

    2000和NT,XP用上面的应该没有问题了。想在98下都行,用这个控件吧:skinengine
    在51DELPHI可以下。
      

  7.   

    我以前便过得程序里有淡入淡出的动画,方法很简单,你可以做好界面后,把界面图片截下来,再在photoshop里用光昏效果依次变黑,再在程序需要的
    地方控制贴图时间即可哈哈哈,一个笨办法,试试看吧