Самоучитель по Delphi 7 для профессионалов



             

Размещение значка приложения на System Tray - часть 2


Примечание 

Изменить главный значок приложения можно в диалоговом окне Project/ Options на странице Application. Он будет доступен через свойство Application.Icon. Тут же можно отредактировать и строку для подсказки — свойство Application.Title.

Наконец, в поле uFlags вы должны сообщить системе, что именно вы от нее хотите, или, другими словами, какие из полей hicon, uCaiibackMessage и szTip вы на самом деле заполнили. В этом поле предусмотрена комбинация трех флагов: NIF_ICON, NIF_MESSAGE и NIF_TIP. Вы можете заполнить, скажем, поле szTip, но если вы при этом не установили флаг NIF_TIP, созданный вами значок не будет иметь строки с подсказкой.

Два приведенных ниже метода иллюстрируют сказанное. Первый из них создает значок на System Tray, а второй — уничтожает его.

const WM_MYTRAYNOTIFY = WMJJSER + 123;

procedure TForml.CreateTraylcon(n:Integer); 

var nidata : TNotifyiconData;

begin

with nidata do 

begin

cbSize := SizeOf{TNotifyiconData) ;

Wnd := Self.Handle;

uID := n;

uFiags := NIF_ICON or NIF_MESSAGE or NIFJTIP;

uCallBackMessage := WM_MYTRAYNOTIFY;

hicon := Application.Icon.Handle;

szTip := 'THis is Traylcon Example'; 

end;

Shell_NotifyIcon(NIM_ADD, @nidata); 

end;

procedure TForml.DeleteTraylcon(n:Integer); 

var nidata : TNotifylconData; begin

with nidata do

begin

cbSize := SizeOf(TNotifylconData);

 Wnd := Self.Handle; uID := n; end;

Shell_NotifyIcon(NIM_DELETE, @nidata);

end;

Примечание

He забывайте уничтожать созданные вами значки на System Tray. Это не делается автоматически даже при закрытии приложения. Значок будет удален только после перезагрузки системы.

Внешний вид значка, помещенного нами на System Tray, ничем не отличается от значков других приложений (рис. 31.1).

Рис. 31.1. Над значком, помещенным на панель System Tray, видна строка подсказки

Сообщение, задаваемое в поле uCallbackMessage, по сути дела является единственной ниточкой, связывающей вас со значком после его создания. Оно объединяет в себе несколько сообщений. Когда к вам пришло такое сообщение (в примере, рассмотренном выше, оно имеет идентификатор WM_MYTRAYNOTIFY), поля в переданной в обработчик структуре типа TMessage распределены так. Параметр wParam содержит номер значка (тот самый, что задавался в поле uID при его создании), а параметр LParam — идентификатор сообщения от мыши, вроде WM_MOUSEMOVE, WM_LBUTTONDOWN и т. п. К сожалению, остальная информация из этих сообщений теряется. Координаты мыши в момент события придется узнать, вызвав функцию API GetCursorPos:




Содержание  Назад  Вперед