Вылет окна 2

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Оформил: DeeCo

Автор: http://www.swissdelphicenter.ch


A lot of Windows applications show a nice zooming animation when they

minimize/maximize their windows. Ofcourse you can do this too!

Microsoft provides the DrawAnimatedRects() function for this purpose and I’ll

show you how to use it.

As an example I’ll show how to show an animation that you can use to minimize

your application to the system tray area. This example doesn’t actually minimize

the application, it only shows the animation.

First create a new application and put a button on the form. Use the following

OnClick-handler for the button:


procedure TForm1.Button1Click(Sender: TObject);


FormRect, TrayRect: TRect;

hTray: THandle;


// Get handle of tray window

hTray := FindWindowEx(FindWindow(‘Shell_TrayWnd’, nil), 0,’TrayNotifyWnd’, nil);

if hTray 0 then


// This is the source rect for the animation.

FormRect := BoundsRect;

// Get tray window’s coordinates as a TRect. This will be the animation’s destination rect.

GetWindowRect(hTray, TrayRect);


Now perform the actual animation. Note that this code only shows the

animation. It does NOT minimize this application to the tray. I leave

that up to yourself 😉

Also notice that the Delphi Help documents are very wrong about this

function! Use the official MSDN docs located Microsoft’s website.

Instead of IDANI_CAPTION you can also use IDANI_OPEN and IDANI_CLOSE, but

they don’t seem to do anything… Maybe they are for future use?


if not DrawAnimatedRects(Handle, IDANI_CAPTION, FormRect, TrayRect) then


MessageDlg(‘DrawAnimatedRects() failed!’, mtError, [mbOK], 0);





MessageDlg(‘Can»t get tray window handle!’, mtError, [mbOK], 0);




Добавить комментарий