(_Примечание_J

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

Наконец, в поле uFlags вы должны сообщить системе, что именно вы от нее хотите, ИЛИ, другими словами, какие ИЗ полей Мсоп, uCailbackMessage и szTip вы на самом деле заполнили. В этом поле предусмотрена комбинация трех флагов: nif icon, nif__message и nif_tip. вы можете заполнить, скажем, поле szTip, но если вы при этом не установили флаг nif_tip, созданный вами значок не будет иметь строки с подсказкой.

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

const

WM_MYTRAYNOTIFY = wm_user + 123;
procedure TForml. CreateTraylcon (n: Integer) ;
var nidata : TNotifyiconCata;
begin with nidata do begin
cbSize := SizeOf(TNotifyiconData) ;
Wnd := Self.Handle;
uID := n;
uFlags :=NIF_ICON or NIF_MESSAGE or NIFJTTP;
uCallBackMessage :=WM_MYTRAYNOTIFY;
hlcon := Application.Icon.Handle;
szTip := "IHis is Traylcon Examples-end;
Shell_NotifyIcon (NIM^ADD, (inidata) ;
end;
procedure TForml.DeleteTraylcon(n:Integer) ;
var nidata : TNotifylconData;
begin with nidata do begin
cbSize := SizeOf(TNotifylconData) ;
Wnd := Self.Handle;
uID := n;
end;
Shell_Notifylcon(NIM_DELETE, @nidata);
end;

( Примечание ^

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

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

Программирование в Delphi 7

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

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

procedure TForml .WMICON (var msg: TMessage) ; var P : TPoint; fcegin case msg.LParam of

WM_LBUTTONDOWN:

begin GetCursorPos(р);

SetForegroundWindow(Application.MainForm.Handle); PopupMenul.Popup(P.X, P.Y) ; end; WM_LBUTTONUP :

end;
end;

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

Теперь решим еще две задачи. Во-первых, как сделать, чтобы приложение минимизировалось не на Панель задач (TaskBar), а на System Tray? И более того - как сразу запустить его в минимизированном виде, а показывать главную форму только по наступлении определенного события (приходу почты, наступлению определенного времени и т. п.).


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Ноябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс