Как в Delphi 7 вывести значек (иконку) программы в область уведомлений.
Автор megabax
05.07.2009 г.
Как в Delphi
7 вывести значек (иконку) программы в область уведомлений.
В этой статье
мы рассмотрим пример, как вывести значок программы в область уведомлений (правый
нижний угол экрана, где горят разные значки и часы с календарем)*.
И так,
создаем проект, называем форму frmNotifyIcon, в свойство
Caption пишем значение «Пример работы с областью уведомления».
Теперь
положим на форму PopupMenu и назовем его pmMenu**.
В
Object Inspector-е найдем для добавленного компонента
свойство Items, откроем редактор свойства, введем
всплывающее меню**:
А теперь
займемся программированием. Откроем модуль формы, нажав на кнопку
Toggle Form/Unit**:
Тем самым мы
переключимся на окно редактирования программы.
Найдем раздел
type. Перед ним вставим объявление константы:
const
WM_MYICONNOTIFY
= WM_USER + 123;
Далее, в подразделе private
самого разедела type, сразу после комментария {
Private declarations } вставим объявление переменной
ShownOnce:
private
{ Private declarations }
ShownOnce: Boolean;
В подразделе
public мы объявим нужные нам процедуры:
WM_LBUTTONUP:
//по нажатию левой клавиши, WM_RBUTTONUP по правой
begin
GetCursorPos(p);
SetForegroundWindow(Application.MainForm.Handle);
pmMenu.Popup(P.X, P.Y);
end;
WM_LBUTTONDBLCLK
: messageDlg('Программа пример иконки в области
уведомлений',mtInformation,[mbOk],0);
end;
end;
В этой
процедуре мы обрабатываем сообщение от области уведомления. Проверяем, нажата ли
клавиша мыши. Если нажата, то определяем координаты курсора мыши:
GetCursorPos(p);
Затем мы
переводим наше приложение на передний план:
SetForegroundWindow(Application.MainForm.Handle);
И
активизируем всплывающее меню в точке, где пользователь кликнул мышкой
pmMenu.Popup(P.X, P.Y);
Если у нас
двойной щелчок мыши, то мы просто выводим демонтсрационное сообщение
WM_LBUTTONDBLCLK :
messageDlg('Программа пример
иконки в области уведомлений',mtInformation,[mbOk],0);
Теперь перейдем к описанию
процедуры WMSYSCOMMAND(var
msg: TMessage);message
WM_SYSCOMMAND;
inherited;
//обработка минимизирвания окна, не сворачевается а
скрывается
if
(Msg.wParam=SC_MINIMIZE) then itHideClick(Self);
end;
В этой
процедуре мы проверяем событие минимизации окна. Обычно, когда пользователь
нажимает на кнопку окна «Свернуть», то окно минимизируется, тоесть,
сворачивается. Но здесь мы сделаем, что бы оно просто исчезало. Для этого
используем процедуру itHideClick, которая у нас будет
обработчиком события OnClick пункта меню
itHide. Давайте напишем его:
В этом
обработчике мы делаем окно программы невидимым, создаем в области уведомления
иконку, делаем пункт itHide недоступным, а itRestore
наоборот, действующим.
Процедура
HideMainForm у нас еще не описана. Давайте опишем ее:
В этой
процедуре мы заполняем структуру TNotifyIconData и
передаем ее встроенной процедуре Shell_NotifyIcon,
которая, собственно говоря, и создает иконку окна уведомления.
Теперь опишем
процедуру удаления иконки из области уведомления:
Затем
проверяем, не показывалось ли наше окно раньше. Если нет то перебираем все
компоненты главного окна, делая их видимыми.
Процедуры
описали. Теперь займемся написанием обработчиков событий. Обработчик события
OnClick пункта меню itHide у
нас уже есть. Напишем такой же обработчик для itRestore:
В этом
обработчике мы вызываем процедуру делания формы видимой (ту самую, где
перебираются все компоненты), затем делаем неактивным пункт
itRestore и доступным itHide.
Обработчик
OnClick пункта меню itExit
(«Выход») самый простой, тут всего одна команда – закрыть окно:
Все,
программа написана, ее исходник находиться здесь.
Запустим
программу, увидим вот такое окно:
А в области
уведомления у нас появиться иконка*:
Щелкните на
ней и появится меню*:
Выйдите из
программы, иконка исчезнет. Если кликните по иконе два раза, должно выйти
сообщение:
Давайте так
же протестируем, что при выборе пункта меню «Скрыть» окно программы исчезает и
становиться доступным пункт «Восстановить». При выборе пункта «Восстановить»
окно снова появляется, пункт «Восстановить» становиться недоступным, а пункт «Скрыть»
доступным. Проверим, что при нажатии на кнопку «Свернуть»
Окно не
сворачивается, а исчезает, но его можно восстановить через иконку в области
уведомления.
Теперь
давайте поэкспериментируем. Закомментим (удалим) строку
Запустим и
закроем программу несколько раз. Теперь иконка из области уведомления у нас не
исчезает*.
Правда, при
попытке ткнутся в эти иконку они пропадают. А вот если у нас правильный
обработчик OnDestroy, то иконка удаляется сразу, как
только вы закрыли программу.
Скриншоты, помеченные знаком * ,
являются цитатами и иллюстрациями
программного продукта "Microsoft Windows",
авторское право на который принадлежит "Microsoft".
Скриншоты, помеченные знаком ** ,
являются цитатами и иллюстрациями
программного продукта "Delphi", авторское
право на который принадлежит "Borland Software
Corporation".