Главная » Delphi » Нестандартное закрытие и восстановление окна программы. Иконка в Tray Bar

0

Вы все неоднократно встречали программы, которые при нажатии на системную кнопку-крестик (в правом верхнем углу окна) не закрываются, а сворачиваются в иконку в System Tray’ (это обычно переводят как "системное меню" или "системная панель", но во избежание семантической путаницы — слишком много всего "системного" получается — мы будем называть его просто Tray). Некоторые программы делают то же самое и при нажатии на кнопку минимизации. Разберемся сначала, зачем и когда это может понадобиться, в предположении, что создается серьезное приложение для работы, а не просто так.

Сворачивание в иконку вместо закрытия может потребоваться, если мы хотим, чтобы приложение всегда было под рукой со всеми сохраненными настройками и данными, но при этом не "светилось" в списке задач (доступных при перелистывании через <Alt>+<Tab>) и не мешалось на панели задач. Получается нечто вроде так называемой "резидентной программы". В DOS название "резидентная программа" означала просто постоянное присутствие ее в памяти, но для многозадачной среды это название во многом обессмысливается. Типичный признак "настоящей" резидентной программы в Windows, когда она что-то делает полезное в фоновом режиме, а не просто ожидает, пока к ней обратятся. С этой точки зрения резидентной, например, будет программа с использованием ловушек (hook, см. главу б). Но с точки зрения пользователя чем хуже программы, просто реагирующие на некую горячую клавишу? Так что это есть лишь вопрос терминологии.

Отметим, что злоупотреблять присутствием вашей программы в Tray не следует. Сейчас модно чуть ли не любую программу запускать в Tray и ничего, кроме раздражения, это вызвать не может. Лично у меня там более десятка нужных мне приложений (и далеко не всем им позарез надо светиться в Tray, просто выхода нет), и если бы я позволял обустраиваться там еще и МРЗ- плееру, интернет-пейджеру, программам для сканера, принтера, цифровою фотоаппарата, и прочим далеко не ежеминутно нужным мне вещам, у меня просто не осталось бы свободного места. Но ввести такую возможность опционально— для многих задач весьма полезная вещь. Единственное, что при этом требуется— в контекстном меню иконки обязательно должен быть пункт Удалить или Закрыть, чтобы не приходилось копаться в настройках н перезапускать компьютер для избавления от какого-нибудь назойливого "агента" или службы онлайнового обновления.

Что же касается минимизации в Tray (т. е. выполнения соответствующего действия при сворачивании, а не закрытии программы), то это для обычной программы требуется нечасто. Если вы не хотите, чтобы программа вообще когда-нибудь оказалась в списке задач, проще совсем убрать (точнее, дезактивировать) кнопку минимизации еще на этапе проектирования. И, тем не менее, позже мы покажем, как это делается, а в дальнейшем — как это можно использовать. И начнем с наиболее простого случая — сворачивания в иконку при потере приложением фокуса, для того чтобы проиллюстрировать, как работает механизм размещения иконки в Tray и восстановления окна, а после перейдем к более практическим применениям.

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

По теме:

  • Комментарии