网站首页 | 网页制作 | 网络编程 | 图形图象 | 冲浪宝典 | 操作系统 | 软件教学 | 网络安全 | 认证考试 | 下载中心 | 游戏下载
| 网络编程首页 | ASP | ASP.NET | PHP | JSP | C# | Delphi | Java | C/C++ | XML | SMS | VC | VB | 数据库 |
您现在的位置: 超人气学院 >> 网络编程 >> Delphi >> 文章正文 用户登录 新用户注册
动画关闭窗口的示例           
动画关闭窗口的示例
作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-10 13:15:00

可以像QQ一样实现最小化窗口时窗口到系统栏的动画效果。

Unit main;

Interface

Uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   RXShell, StdCtrls;
Type TZoomDirection = (ZoomFormOpen, ZoomFormClosed);//枚举类型
Type
   TFormMain = Class(TForm)
      TrayIcon1: TRxTrayIcon;//Rx组件里的系统栏图标控件
      Label1: TLabel;
      Procedure FormShow(Sender: TObject);
    procedure TrayIcon1DblClick(Sender: TObject);
   Private
      Procedure OnMinCmd(Var Message: Tmessage); Message WM_SYSCOMMAND; //捕获消息
      Procedure FrmZoomToTray(Frm: TForm; Direction: TZoomDirection); //产生窗体从系统工作区中进入或出来的动态效果子过程
   Public
    { Public declarations }
   End;
Var
   FormMain: TFormMain;

Implementation

{$R *.DFM}

Procedure TFormMain.FormShow(Sender: TObject);
Begin
ShowWindow(Application.Handle, SW_HIDE);//消除任务栏显示
End;

Procedure TFormMain.OnMinCmd(Var Message: Tmessage);
Begin
   If (Message.WParam = SC_MINIMIZE) Then //如果是最小化消息
      Begin
         TrayIcon1.Active := True; //显示图标
         FrmZoomToTray(FormMain,ZoomFormClosed);
         FormMain.Hide; //隐藏窗体
         Exit;
      End;
   Inherited; //让窗体处理其它消息
End;

Procedure TFormMain.FrmZoomToTray(Frm: TForm; Direction: TZoomDirection);
Var
   TrayWnd: HWND;
   sClassName: Array[0..255] Of Char;
   xFrom, xTo: TRect;
Begin
   If (Direction = ZoomFormClosed) And (Frm.Visible = False) Then
      Exit;
   If (Direction = ZoomFormOpen) And (Frm.Visible = True) Then
      Exit;
   TrayWnd := FindWindow('Shell_TrayWnd', Nil);
   TrayWnd := GetWindow(TrayWnd, GW_CHILD);
   Repeat
      GetClassName(TrayWnd, @sClassName, 255);
      If StrPas(sClassName) = 'TrayNotifyWnd' Then
         Break;
      TrayWnd := GetWindow(TrayWnd, GW_HWNDNEXT);
   Until TrayWnd = 0;
   Case Direction Of
      ZoomFormOpen:
         Begin
            GetWindowRect(TrayWnd, xFrom);
            xFrom.Left := (xFrom.Right - (xFrom.Right - xFrom.Left) Div 2);
            xFrom.Right := xFrom.Left + 1;
            GetWindowRect(Frm.Handle, xTo);
            DrawAnimatedRects(Frm.Handle, IDANI_OPEN Or IDANI_CAPTION, xFrom, xTo);
         End;
      ZoomFormClosed:
         Begin
            GetWindowRect(Frm.Handle, xFrom);
            GetWindowRect(TrayWnd, xTo);
            xTo.Left := (xTo.Right - (xto.Right - xTo.Left) Div 2);
            xTo.Right := xTo.Left + 1;
            DrawAnimatedRects(Frm.Handle, IDANI_CLOSE Or IDANI_CAPTION, xFrom, xTo);
         End;
   End;
End;

procedure TFormMain.TrayIcon1DblClick(Sender: TObject);
begin
   TrayIcon1.Active := False;
   FrmZoomToTray(FormMain,ZoomFormopen);
   FormMain.Show;
end;

End.

[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda    责任编辑:kinda 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
     Delphi开发NTServic[1455]
     delphi中的XML解析控[1346]
     delphi读取ini文件[1244]
     ASC II 完整码表及简[874]
     浅谈控件(组件)制作[651]
     在Delphi中动态生成[643]
     显示密码编辑框中的[643]
     用Delphi编写系统进[638]
     将image的图片保存为[634]
     Delphi自定义消息应[574]
    相 关 文 章
    WirelessToolKit中注意模拟
    第十八讲  动画制作及声音
    一个stmt多个rs进行操作引
    正确、优雅的关闭weblogic
    能作个定时打开新窗口,并
    请教,做网页怎样让弹出窗
    如果BROWSER已关闭了COOKI
    Weblogic server关闭脚本。
    Oracle9iAS Containers fo
    基于Java的动画编程基础
    用java关闭IE窗口
    jsp项目中实现关闭浏览器后
    利用Java Applet编程实现动
    基于MIDP1.0实现动画效果
    在Java Applet中的动画编程
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)