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

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

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

Заметьте, что когда Вы закрываете окно приложения в трей, это фактически не закрывает приложение, а просто скрывает окно и оставляет приложение выполняться в трее. Нет никакого визуального ключа, как если бы Вы свернули обычное приложение.

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


 

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


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