Анимация иконки в трее при запуске приложения
Мы можем изменить это поведение, используя функцию DrawAnimatedRects из Windows API.
unit UTrayZoom;
interface
uses
Windows;
type
TTrayZoom = class(TObject)
private
class function GetTrayRect: TRect;
class procedure DoZoom(const Wnd: HWND; const Src, Dest: TRect);
public
class procedure ZoomToTray(const Wnd: HWND);
class procedure ZoomFromTray(const Wnd: HWND);
end;
implementation
class procedure TTrayZoom.DoZoom(const Wnd: HWND; const Src, Dest: TRect);
begin
DrawAnimatedRects(Wnd, IDANI_CAPTION, Src, Dest);
end;
class function TTrayZoom.GetTrayRect: TRect;
var
TaskbarWnd, TrayWnd: HWND;
begin
TaskbarWnd := FindWindow('Shell_TrayWnd', nil);
TrayWnd := FindWindowEx(TaskbarWnd, 0, 'TrayNotifyWnd', nil);
GetWindowRect(TrayWnd, Result);
end;
class procedure TTrayZoom.ZoomFromTray(const Wnd: HWND);
var
WndRect: TRect;
begin
GetWindowRect(Wnd, WndRect);
DoZoom(Wnd, GetTrayRect, WndRect);
end;
class procedure TTrayZoom.ZoomToTray(const Wnd: HWND);
var
WndRect: TRect;
begin
GetWindowRect(Wnd, WndRect);
DoZoom(Wnd, WndRect, GetTrayRect);
end;
end.
Метод DoZoom просто посылает запрос к DrawAnimatedRects. GetTrayRect получает прямоугольник области панели задач.
Два метода ZoomToTray и ZoomFromTray изменяют масштаб изображения указанного окна. Параметр Wnd для этих методов должен быть дескриптором окна формы, для которой Вы изменяете размер.
Использование
Когда Ваше приложение разворачивается из трея, вызывается TTrayZoom.ZoomFromTray. Вы можете сделать это в обработчике события OnClick.
Когда Ваше приложение сворачивается в трей, вызывается метод TTrayZoom.ZoomToTray. Это может быть сделано в событиях OnClose или OnCloseQuery формы.
Автор: Peter Johnson
Комментарии