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

解决方案 »

  1.   

    win2k以上有效:TransparentColorValue=clBtnFace;
    AlphaBlend=true;
    AlphaBlendValue="0--255";//自己控制
      

  2.   

    在OnFormCreate事件中设置:Timer1.inveral:=xxx;i:=10;
    在OnTimer事件中设置:bgein
                        AlphaBlendValue:=i;
                        i:=i+10;
                        end;用Delphi6做更容易!
      

  3.   

    有一个API能实现,具体是什么忘了,去看看delphi葵花宝典
      

  4.   


    在Form的OnCreate中添加:
    AnimateWindow(Self.Handle, 250, AW_BLEND or AW_ACTIVATE);
      

  5.   

    来自猛料:
    类似网络蚂蚁的弹出通知窗口:
    procedure TForm1.FormShow(Sender: TObject);
    begin
      AnimateWindow (Handle, 400, AW_CENTER);
    ///  AnimateWindow (Handle, 400, AW_BLEND);  ///淡入
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      AnimateWindow (Handle, 400, AW_CENTER or AW_HIDE);
    ///  AnimateWindow (Handle, 400, AW_BLEND or $00010000); ///淡出
    end;在form上胡乱放些控件,然后
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      AutoScroll := False;
      repeat
        ScaleBy (93, 100);
        Application.ProcessMessages;
      until Height < 70;
    end;不知大家还有没有别的有意思的东西,拿出来同乐吧!
    (注:上面的程序是从国外的一篇文章上找的)procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
    AnimateWindow(handle,300,AW_HIDE or AW_CENTER);

    AnimateWindow(handle,300,AW_HIDE or AW_BLEND);(windwos2000 用效果好)
    end;效果也还可以
    to 烂泥:高!我再增加一点趣味性:
    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      // 正常的工作在此进行
      if CanClose then
      begin
        Randomize;
        AnimateWindow(handle,200,AW_HIDE or Random(16)+1);
      end;
    end;
      

  6.   

    unit FadeWindow;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;type
      TFadeWindow = class(TComponent)
      private
        OldWndProc: TFarProc;
        NewWndProc: Pointer;    CanHide:    Boolean;
        FadeAlpha:  Integer;
        FadeTimer:  TTimer;    FFadeWin:   TForm;    FEnabled:   Boolean;
        FFadeTime:  Integer;    FFadeShow:  Boolean;
        FFadeHide:  Boolean;    FMinAlpha:  Byte;
        FMaxAlpha:  Byte;
        FFadeStep:  Byte;    FOnFadeShowComplete: TNotifyEvent;    procedure HookParent;
        procedure UnhookParent;    procedure HookWndProc(var Message: TMessage);    procedure SetMinAlpha(Value: Byte);
        procedure SetMaxAlpha(Value: Byte);    procedure InitWnd;
        procedure DoneWnd;
        procedure SetWndAlpha(const Alpha: Byte);    procedure OnFadeShow(Sender: TObject);
        procedure OnFadeHide(Sender: TObject);
      protected
      public
        destructor Destroy; override;
        constructor Create(AOwner: TComponent); override;
        procedure FadeOut;  //我添加的,在关闭时调用
      published
        property Enabled: Boolean read FEnabled write FEnabled default True;
        property FadeTime: Integer read FFadeTime write FFadeTime default 1000;    property FadeWin: TForm read FFadeWin write FFadeWin;    property FadeShow: Boolean read FFadeShow write FFadeShow default True;
        property FadeHide: Boolean read FFadeHide write FFadeHide default True;    property MinAlpha: Byte read FMinAlpha write SetMinAlpha default Low(Byte);
        property MaxAlpha: Byte read FMaxAlpha write SetMaxAlpha default High(Byte);
        property FadeStep: Byte read FFadeStep write FFadeStep default 5;    property OnFadeShowComplete: TNotifyEvent read FOnFadeShowComplete write FOnFadeShowComplete;
      end;
    procedure GetWindowsVersion(var Major : integer; var Minor : integer);
    procedure Register;implementationconst
      MinAlpha      = 0;
      MaxAlpha      = High(Byte);const
      user32        = 'user32.dll';  WS_EX_LAYERED = $00080000;  LWA_COLORKEY  = $00000001;
      LWA_ALPHA     = $00000002;{function SetLayeredWindowAttributes(hWnd: HWND;
                                        crKey: TColorRef;
                                        bAlpha: Byte;
                                        dwFlags: DWord): BOOL; stdcall;
                                        external user32
                                        name 'SetLayeredWindowAttributes'; }
    { TFadeWindow }
    procedure TFadeWindow.FadeOut ;
    begin
            CanHide := False;
            FadeAlpha := FMaxAlpha;
            SetWndAlpha(FadeAlpha);
            FadeTimer.OnTimer := OnFadeHide;
            FadeTimer.Enabled := True;
    end;
    constructor TFadeWindow.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);  OldWndProc := nil;
      NewWndProc := nil;  CanHide    := False;  FadeTimer  := TTimer.Create(nil);
      FadeTimer.Enabled := False;  if Owner is TForm then
        FFadeWin := Owner as TForm
      else
        FFadeWin := nil;  FEnabled   := True;
      FFadeTime  := 1000;  FFadeShow  := True;
      FFadeHide  := True;  FMinAlpha  := Low(Byte);
      FMaxAlpha  := High(Byte);
      FFadeStep  := 5;  FOnFadeShowComplete := nil;  if not (csDesigning in ComponentState) then
        HookParent;
    end;destructor TFadeWindow.Destroy;
    begin  FadeTimer.Free;  inherited Destroy;
    end;procedure TFadeWindow.SetMinAlpha(Value: Byte);
    begin
      if Value <= MaxAlpha then
      begin
        FMinAlpha := Value;
      end
      else
      begin
        FMinAlpha := FMaxAlpha;
        FMaxAlpha := Value;
      end;
    end;procedure TFadeWindow.SetMaxAlpha(Value: Byte);
    begin
      if Value >= MinAlpha then
      begin
        FMaxAlpha := Value;
      end
      else
      begin
        FMaxAlpha := FMinAlpha;
        FMinAlpha := Value;
      end;
    end;procedure TFadeWindow.HookParent;
    begin
      if Assigned(FFadeWin) and IsWindow(FFadeWin.Handle) then
      begin
        OldWndProc := TFarProc(GetWindowLong(FFadeWin.Handle, GWL_WNDPROC));
        NewWndProc := MakeObjectInstance(HookWndProc);
        SetWindowLong(FFadeWin.Handle, GWL_WNDPROC, LongInt(NewWndProc));
      end;
    end;
    (下续)
      

  7.   

    (接上)
    procedure TFadeWindow.UnhookParent;
    begin
      if Assigned(FFadeWin) and IsWindow(FFadeWin.Handle) and Assigned(OldWndProc) then
        SetWindowLong(FFadeWin.Handle, GWL_WNDPROC, LongInt(OldWndProc));  if Assigned(NewWndProc) then
        FreeObjectInstance(NewWndProc);  NewWndProc := nil;
      OldWndProc := nil;
    end;procedure TFadeWindow.InitWnd;
    var
      l: Longint;
    begin
      l := GetWindowLong(FFadeWin.Handle, GWL_EXSTYLE);
      l := l or WS_EX_LAYERED;
      SetWindowLong(FFadeWin.Handle, GWL_EXSTYLE, l);
    end;procedure TFadeWindow.DoneWnd;
    var
      l: Longint;
    begin
      l := GetWindowLong(FFadeWin.Handle, GWL_EXSTYLE);
      l := l and (not WS_EX_LAYERED);
      SetWindowLong(FFadeWin.Handle, GWL_EXSTYLE, l);
    end;procedure TFadeWindow.SetWndAlpha(const Alpha: Byte);  //判断是否是WIN2000以上的版本。
    {begin
      SetLayeredWindowAttributes(FFadeWin.Handle,
                                 0,
                                 Alpha,
                                 LWA_ALPHA);  }
    var
      major, minor : integer;
      old: longint;
      User32: Cardinal;
      SetLayeredWindowAttributes: function (hwnd: LongInt; crKey: byte; bAlpha: byte; dwFlags: LongInt): LongInt; stdcall;
    begin
         GetWindowsVersion(major, minor);
         if ((major >= 5) and (minor >= 0)) then //Windows 2000(NT5)
         begin
            User32 := LoadLibrary('USER32');
            if User32 <> 0 then
            try
               SetLayeredWindowAttributes := GetProcAddress(User32, 'SetLayeredWindowAttributes');
               if @SetLayeredWindowAttributes <> nil then
               SetLayeredWindowAttributes(FFadeWin.Handle,
                                 0,
                                 Alpha,
                                 LWA_ALPHA);
            finally
                    FreeLibrary(User32);
            end;
         end;
    end;procedure TFadeWindow.OnFadeShow(Sender: TObject);
    begin
      SetWndAlpha(FadeAlpha);
      Inc(FadeAlpha, FFadeStep);
      if FadeAlpha >= FMaxAlpha then
      begin
        (Sender as TTimer).Enabled := False;
        if FadeAlpha <> FMaxAlpha then
          SetWndAlpha(FMaxAlpha);
        //DoneWnd;
        if Assigned(FOnFadeShowComplete) then
          FOnFadeShowComplete(Self);
      end;
    end;procedure TFadeWindow.OnFadeHide(Sender: TObject);
    begin
      SetWndAlpha(FadeAlpha);
      Dec(FadeAlpha, FFadeStep);
      if FadeAlpha <= FMinAlpha then
      begin
        (Sender as TTimer).Enabled := False;
        CanHide := True;
        (FFadeWin as TForm).Close;
      end;
    end;procedure TFadeWindow.HookWndProc(var Message: TMessage);
      procedure DefaultHandler;
      begin
        with Message do
          Result := CallWindowProc(OldWndProc, FFadeWin.Handle, Msg, wParam, lParam);
      end;
    begin
      if FEnabled and Assigned(FFadeWin) and IsWindow(FFadeWin.Handle) then
      begin
        FadeTimer.Interval := FFadeTime div ((FMaxAlpha - FMinAlpha + 1) div FFadeStep);    case Message.Msg of
        WM_SHOWWINDOW:
          if TWMShowWindow(Message).Show then
          begin
            if FFadeShow then
            begin
              InitWnd;
              FadeAlpha := FMinAlpha;
              SetWndAlpha(FadeAlpha);
            end;        DefaultHandler;        if FFadeShow then
            begin
              FadeTimer.OnTimer := OnFadeShow;
              FadeTimer.Enabled := True;
            end;
          end
          else
            DefaultHandler;
        WM_CLOSE:
          begin
            if FFadeHide then
            begin
              if CanHide then
              begin
                (FFadeWin as TForm).Visible := False;
                DoneWnd;
                UnhookParent;
                DefaultHandler;
                CanHide := False;
              end
              else
              begin
                //InitWnd;            FadeAlpha := FMaxAlpha;
                SetWndAlpha(FadeAlpha);            FadeTimer.OnTimer := OnFadeHide;
                FadeTimer.Enabled := True;
              end;
            end;
          end;
        else
          DefaultHandler;
        end
      end
      else
        DefaultHandler;
    end;procedure GetWindowsVersion(var Major : integer;var Minor : integer);
    var
      l : longint;
    begin
      l := GetVersion;
      Major := LoByte(LoWord(l));
      Minor := HiByte(LoWord(l));
    end;procedure Register;
    begin
      RegisterComponents('Flier', [TFadeWindow]);
    end;end.
      

  8.   

    请注意:该结贴了!否则,你有机会赢取CSDN监狱七日游!    ----CSDN管理员        ^-^