unit TestForm;interfaceuses
Windows, Classes, Forms, Controls, StdCtrls, ExtCtrls;typeTZoomAction = (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.
Windows, Classes, Forms, Controls, StdCtrls, ExtCtrls;typeTZoomAction = (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.
解决方案 »
- 各位老师,消息循环(Application.Run)之前,显示的Form也能相应消息该如何解释?
- http secure socket is not supported???
- 仿真加密狗 kpe 文件如何使用?100分 !!!!!!
- DataSet.locate(),DataSet.lookup(),DataSet.commandtext都可以用来查询有什么异同?
- 修改!!
- 请问如何实现按下一个按钮后打开“我的电脑”?
- 怎样从TDateTime的一个变量中提取年、月、日
- delphi6.0出书了吗?
- 难道DELPHI写的程序与VIA芯片组的机器不太兼容吗?
- 在DILPHI中如何判断某数据库中的某一字段是否已存在?
- 我这边有个比较实用的软件《光盘信息登记》,大家快来看。
- 两个问题,每个50分啊(①用注册表保存Label1.Font.Style②数据库用的cds文件,类似SQL 的LIKE %SSS% 怎么查询)
WM_TrayMessage=WM_User+100; protected
procedure AppMinimized(Sender: TObject);
procedure WMTrayMessage(var msg:TMessage);message WM_TrayMessage;uses ShellApivar
NID:TNotifyIconData{点击了任务栏的图标}
procedure TMainForm.WMTrayMessage(var msg:TMessage);
var
p:TPoint;
begin
if msg.LParam=WM_LButtonDown then
begin
ShowWindow(Application.Handle,SW_Show);
Application.Restore;
end
else if msg.LParam=WM_RButtonDown then
begin
GetCursorPos(p);
pmTray.Popup(p.x,p.y);
end;
end;{应用程序最小化时图标显示在任务栏}
procedure TMainForm.AppMinimized(Sender:TObject);
begin
NID.cbSize:=SizeOf(TNotifyIconData);
NID.hIcon:=Application.Icon.Handle;
NID.szTip:= '彩虹2.0 Beta ';
NID.uCallbackMessage:=WM_TrayMessage;
NID.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
NID.uID:=0;
NID.Wnd:=Handle;
Shell_NotifyIcon(NIM_ADD,@NID);
ShowWindow(Application.Handle,SW_Hide);
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
Application.OnMinimize:=AppMinimized;
AppMinimized(nil);
end;procedure TMainForm.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@NID);
end;