Вопрос
Как поместить иконку приложения в Sуstem Tray?
Ответ
Там где нужно создать иконку — ставишь код из FormCreate, там где удалить — из FormDestroy. Для изменения иконки нужно:
pnid.hIcon присвоить новое значение иконки
вызвать Shell_NotifyIcon(NIM_MODIFY, Addr(pnid))
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, shellapi, ExtCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); end; const WM_NOTIFYTRAYICON = (WM_USER+1); // сообщения от иконки. // нужно только если будет обработка событий от иконки var Form1: TForm1; pnid: NOTIFYICONDATA; // указатель на структуру описывающую иконку implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin pnid.cbSize := sizeof(NOTIFYICONDATA); // размер структуры pnid.Wnd := Form1.Handle; // HWND окна, которое будет обрабатывать сообщения от иконки pnid.uID := 0; // номер иконки pnid.uFlags := NIF_ICON + NIF_TIP; // иконка видна + у нее есть хинт pnid.hIcon := CopyIcon(Application.Icon.Handle); pnid.szTip := 'Пример иконки'; // хинт { pnid.uCallbackMessage := WM_NOTIFYTRAYICON; // сообщение которое будет посылать иконка, при действиях с ней // будет работать, если добавить NIF_MESSAGE в pnid.uFlags } Shell_NotifyIcon(NIM_ADD, Addr(pnid)); // добавляем иконку в трей end; procedure TForm1.FormDestroy(Sender: TObject); begin Shell_NotifyIcon(NIM_DELETE, Addr(pnid)); // убираем иконку их трея, иначе будеи там сидеть до тех пор, пока не проведеш мышью над треем end; end.
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация