Анимация иконки в трее при запуске приложения
Мы можем изменить это поведение, используя функцию 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
Комментарии