我的程序有一个托盘图标,程序最小化后会放到托盘,但是窗体最小化的那个动画效果是缩小到任务栏,如何使程序最小化的动画效果为缩小到托盘区(50分)

  • 主题发起人 主题发起人 happyjoe
  • 开始时间 开始时间
procedure TForm1.FormShow(Sender: TObject);
begin

showwindow(application.handle,sw_hide);

end;
 
使用TrayIcon控件,十分方便

下载地址:www.51delphi.com
 
截获SC_MINIMIZE消息,使用一个循环设置窗体的大小和位置,让它让图标区不停地缩小
、移动,最后将窗体设为隐藏。
 
是想学QQ吧,我以前也想了很久。不过后来。。。。。
我一个同事随口说了一下可能是他自已做了一个效果。
我觉得有可能,因为如果你在98下把系统的动画效果关闭,
别的窗口最小化时不再有动画效果了,而它还是有的。。。
如果你也想这么做,就也做一个动画效果吧
 
抄的:
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.
 
多人接受答案了。
 
后退
顶部