用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧Delphi

托盘程序的缩放(托盘程序的最大化/最小化)

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:03:46

摘 要:如何为有托盘图标的窗体添加最大化/最小化的缩放效果
关键字:缩放 效果 最大化 最小化 托盘程序
类 别:API

我们经常看到窗口最大化/最小化时的缩放效果。不幸的是这种效果只能把应用程序缩成应用程序工作栏中的图标,而且表面上似乎没有方法为最小化到托盘区中的程序添加相似的效果。

使用Windows API 函数DrawAnimatedRects可以做到。

这个函数需要窗口的句柄和两个标明起始和结束屏幕坐标的矩形区域。

以下代码说明如何使用这个API函数:


unit TestForm;

interface

uses
Windows, Classes, Forms, Controls, StdCtrls, ExtCtrls;

type

TZoomAction = (zaMinimize, zaMaximize);

TfrmTest = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ private declaration }
public
{ public declaration }
end;

var
frmTest: TfrmTest;

implementation

{$R *.DFM}

procedure ZoomEffect(theForm: TForm; theOperation: TZoomAction);
var
rcStart: TRect;
rcEnd: TRect;
rcTray: TRect;
hwndTray : hWnd;
hwndChild: hWnd;
begin
{ 寻找系统托盘区的位置}
hwndTray := FindWindow(''Shell_TrayWnd'', nil);
hwndChild := FindWindowEx(hwndTray, 0, ''TrayNotifyWnd'', nil);
GetWindowRect(hwndChild, rcTray);

{点击用于最大化/最小化,并切换起始/结束}
if theOperation = zaMinimize then
begin
rcStart := theForm.BoundsRect;
rcEnd := rcTray;
end
else
begin
rcEnd := theForm.BoundsRect;
rcStart := rcTray;
end;

{ 以下是关键的部分... }
DrawAnimatedRects(theForm.Handle, IDANI_CAPTION, rcStart, rcEnd)
end;

procedure TfrmTest.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ZoomEffect(Self, zaMinimize);
end;

procedure TfrmTest.FormShow(Sender: TObject);
begin
ZoomEffect(Self, zaMaximize);
end;

end.

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:20,203.13000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号