Карта сайтаСсылкиКонтакты

Анимация иконки в трее при открытии и закрытии приложения

PDF Печать
Статьи

Когда Вы закрываете приложение, которое отображается в трее, приложение фактически не закрывается, а просто скрывается окно. Приложение остается работать в трее. Нет никакого визуального отображения, которое бы отображало - свернуто приложение или нет.

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


 

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


Защитный код
Обновить