AnimateWindow

WINDOWS提供了一个很有意思的函数:AnimateWindow。
之前我想实现像MSN,QQ这些收到邮件的时候动画方式,从地下升上来的显示一个窗口,感觉很麻烦,自己去写代码,效果很不理想,今天无意中发现了一个函数AnimateWindow,能很好的实现这个功能。并且网上找了一个例子:

// 主窗体:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

// 动画显示窗体:
uses Unit2;

var
mesfrm:tform2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
mesfrm:=tform2.Create(application);
mesfrm.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
mesfrm.close;
end;

end.

unit Unit2;

interface

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

type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure Show;
procedure close;
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

function ShowWindows(WHandle:HWND;DispMode:Integer): Boolean;
var Flag:array [0..11] of Int64;
begin
if DispMode=1 then begin
//显示
Flag[0]:=AW_ACTIVATE+AW_HOR_POSITIVE+AW_VER_POSITIVE+AW_SLIDE;//左上至右下 滑行效果
Flag[1]:=AW_ACTIVATE+AW_HOR_NEGATIVE+AW_VER_POSITIVE+AW_SLIDE;//右上至左下 滑行效果
Flag[2]:=AW_ACTIVATE+AW_CENTER+AW_SLIDE; // 中心向四周 滑行效果
Flag[3]:=AW_ACTIVATE+AW_HOR_POSITIVE+AW_SLIDE; //左 至右 滑行效果
Flag[4]:=AW_ACTIVATE+AW_HOR_NEGATIVE+AW_SLIDE; //右至左 滑行效果
Flag[5]:=AW_ACTIVATE+AW_VER_POSITIVE+AW_SLIDE; //上至下 滑行效果
Flag[6]:=AW_ACTIVATE+AW_HOR_POSITIVE+AW_VER_POSITIVE+AW_BLEND;//左上至右下 淡入淡出
Flag[7]:=AW_ACTIVATE+AW_HOR_NEGATIVE+AW_VER_POSITIVE+AW_BLEND;//右上至左下 淡入淡出
Flag[8]:=AW_ACTIVATE+AW_HOR_POSITIVE+AW_BLEND; //左至右 淡入淡出
Flag[9]:=AW_ACTIVATE+AW_HOR_NEGATIVE+AW_BLEND; //右至左 淡入淡出
Flag[10]:=AW_ACTIVATE+AW_VER_POSITIVE+AW_BLEND; //上至下 淡入淡出
Flag[11]:=AW_ACTIVATE+AW_CENTER+AW_BLEND; //中心向四周 淡入淡出
end;
if DispMode=2 then begin
//关闭
Flag[0]:=AW_HIDE+AW_HOR_POSITIVE+AW_VER_NEGATIVE+AW_SLIDE;//左上至右下 滑行效果
Flag[1]:=AW_HIDE+AW_HOR_NEGATIVE+AW_VER_NEGATIVE+AW_SLIDE;//右上至左下 滑行效果
Flag[2]:=AW_HIDE+AW_CENTER+AW_SLIDE; // 中心向四周 滑行效果
Flag[3]:=AW_HIDE+AW_HOR_POSITIVE+AW_SLIDE; //左 至右 滑行效果
Flag[4]:=AW_HIDE+AW_HOR_NEGATIVE+AW_SLIDE; //右至左 滑行效果
Flag[5]:=AW_HIDE+AW_VER_NEGATIVE+AW_SLIDE; //上至下 滑行效果
Flag[6]:=AW_HIDE+AW_HOR_POSITIVE+AW_VER_NEGATIVE+AW_BLEND;//左上至右下 淡入淡出
Flag[7]:=AW_HIDE+AW_HOR_NEGATIVE+AW_VER_NEGATIVE+AW_BLEND;//右上至左下 淡入淡出
Flag[8]:=AW_HIDE+AW_HOR_POSITIVE+AW_BLEND; //左至右 淡入淡出
Flag[9]:=AW_HIDE+AW_HOR_NEGATIVE+AW_BLEND; //右至左 淡入淡出
Flag[10]:=AW_HIDE+AW_VER_POSITIVE+AW_BLEND; //上至下 淡入淡出
Flag[11]:=AW_HIDE+AW_CENTER+AW_BLEND; //中心向四周 淡入淡出
end;
Randomize;
Result := AnimateWindow(WHandle,500,Flag[Random(6)]);
end;

{ TForm2 }

procedure TForm2.close;
begin
// if AnimateWindow( Handle,200,AW_VER_POSITIVE+AW_HIDE)=false then
if ShowWindows(Handle,2)=false then
begin
showmessage(‘窗体退出出错‘);
free;
end;
inherited close;
end;

procedure TForm2.Show;
begin
top:=430;
left:=560;
// if AnimateWindow(Handle,200,AW_VER_NEGATIVE)=false then
if ShowWindows(Handle,1)=false then
begin
showmessage(‘窗体显示出错‘);
free;
end;
inherited show;
end;

end.

http://www.cnblogs.com/barryhong/archive/2009/04/26/1443798.html

时间: 2024-08-01 10:44:12

AnimateWindow的相关文章

Delphi使用Windows API函数AnimateWindow实现窗体特效

{**********************************************************************API函数 AnimateWindow 使用:函数功能:窗体显示和隐藏时产生特殊的动画效果:可以产生两种类型的动画效果:          滚动动画 和 滑动动画函数原型:BOOL AnimateWindow(HWND hWnd, DWORD dwTime, DWORD dwFlags)参数说明:hWnd 指定产生动画效果的窗体的句柄:          

使用AnimateWindow来实现窗口淡入淡出(主要有四种动画,滚动,滑动,折叠或展开,和淡入淡出)

如果是在VC6下进行编译,应引入下面的预编译宏,注意放在windows.h的前面#undef  WINVER   #define  WINVER   0x500为什么要引入上面的宏呢?看看winuser.h里面该API的声明就明白了:#if(WINVER >= 0x0500)WINUSERAPIBOOLWINAPIAnimateWindow(    HWND hWnd,    DWORD dwTime,    DWORD dwFlags);#endif /* WINVER >= 0x0500

VB.NET 章鱼哥出品--利用API函数AnimateWindow创建Popup提示窗口

当我们打开电脑上网时,是不是会经常看到桌面的右下角弹出一个小的新闻热点窗体,我们可以实现吗?当然可以,这篇文章就来给您掩饰怎么样来用代码实现.看吧,正写着呢弹出了一个. 一.主要用到的函数是API函数AnimateWindow.下面来简单的介绍一下这个函数的使用. 1 函数声明 '声明API函数AnimateWindow.该函数可以动态的操作窗体 Declare Function AnimateWindow Lib "user32" Alias "AnimateWindow&

AnimateWindow 函数 程序退出动画效果

语法:function AnimateWindow(hWnd: HWND; dwTime: DWord; dwFlags: DWORD): BOOL; 参数:hWnd 窗口句柄 DWord 动画时间(毫秒级)一般大于200 dwFlags 显示方式,一般有下面标志: AW_SLIDE:使用滑动类型.缺省则为滚动动画类型.当使用AW_CENTER标志时,这个标志就被忽略.  AW_ACTIVATE:激活窗口.在使用了AW_HIDE标志后不要使用这个标志. AW_BLEND:使用淡出效果.只有当hW

C#.NET使用AnimateWindow制作淡入淡出特殊效果的窗体

使用AnimateWindow制作淡入淡出效果的窗体 命名空间: using System.Runtime.InteropServices; API函数: [DllImport("user32")] private static extern bool AnimateWindow(IntPtr whnd,int dwtime,int dwflag); //dwflag的取值如下 public const Int32 AW_HOR_POSITIVE = 0x00000001; //从左到

Delphi 启动的动画效果函数AnimateWindow(Handle,200,AW_CENTER);

在OnShow加入弹出式窗口事件: procedure TForm1.FormShow(Sender: TObject); begin ANimateWindow(Handle,200,AW_SLIDE+AW_HOR_NEGATIVE); end; 关掉窗口滑动事件在OnClose加入: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ANimateWindow(Handle,200,AW_

类似qq弹窗,自动消失

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; us

弹出窗右下角显示

//窗口加载时         private void BroadcastRecieveFrom_Load(object sender, EventArgs e)         {             //初始化窗口出现位置             Point p = new Point(Screen.PrimaryScreen.WorkingArea.Width - this.Width, Screen.PrimaryScreen.WorkingArea.Height - this.H

窗口淡入淡出

思路 1)#define WINVER 0X500  // 放在所有头文件前 #include <winuser.h> 2) WM_CREATE AnimateWindow(hwnd, 1000, AW_ACTIVATE|AW_BLEND); InvalidateRect(hwnd, NULL, TRUE); UpdateWindow(hwnd); 3) WM_CLOSE AnimateWindow(hwnd, 1000, AW_HIDE|AW_BLEND); 注:除淡入淡出外,还有滑动特效