Функция Shell__NotifyIcon позволяет управлять значком в области System Tray. Но надо еще принять меры к тому, чтобы приложение не отображалось в полосе задач. Иначе значок в области System Tray теряет смысл. Как можно предотвратить появление изображения свернутого окна приложения в полосе задач рассказано в разд. 11.8.

Рассмотрим чисто тестовый пример (проект PSysTray в каталоге Windows на приложенном к книге диске). При его выполнении в области System Tray размещается его пиктограмма, а окно приложения (рис. 11.4 а) пользователю не видно и доступно только из всплывающего меню пиктограммы или после двойного щелчка на значке. Форма этого приложения показана на рис. 11.4 б. Она содержит компонент всплывающего меню PopupMenul с тремя разделами: Развернуть приложение (имя раздела в программе - MRestore) - делает видимой главную форму, Закрыть приложение (имя MClose) - завершает выполнение приложения, и Удалить значок (имя MDelete) - удаляет значок из System Tray и одновременно делает видимой главную форму, так как иначе приложение после этого было бы невозможно закрыть.

11.9 Пиктограммы в области System Tray

Рис. 11.4. Окно (а) и форма (6) приложения PSysTray

В примере задана пиктограмма приложения. Для этого выполнена команда Project | Options и на странице Application кнопкой Load Icon проведена загрузка пиктограммы. Это та пиктограмма, которая появится в области System Tray.

На форме размещены три кнопки. Кнопка Создать значок (имя BCreate) доступна только в случае, если пиктограмма удалена из области System Tray. Щелчок на этой кнопке размещает пиктограмму в System Tray. Кнопка Удалить значок (BDelete) удаляет значок из области System Tray. Кнопка Свернуть (BHide) делает форму невидимой. Кнопка доступна, только если в области System Tray размещена пиктограмма.

Ниже приведен текст этого приложения с некоторыми сокращениями.

unit Unitl; interface

const MyTraylcon = WM_USER + 1; type

TForml = class(TForm) private

procedure MTIcon(var a: TMessage); message MyTraylcon; end; var

Forml: TForml;

implementation

{$R *.dfmj uses ShellAPI;
var NID: TNotifylconData;
procedure TForml.FormCreate(Sender: TObject);

begin

Application.ShowMainForm := false; with NID do begin

cbSize := SizeOf (TNotify*TconData) ;
Wnd := Handle;
uld := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := MyTraylcon;
hlcon := Application.Icon.Handle;
szTip := 'Мое приложение';
end;
Shell_Notifylcon(NIM_ADD, @NID);
end;

procedure TForml.FormDestroy(Sender: TObject); begin

Shell_Notifylcon(NIM_DELETE, @NID);
end;
procedure TForml.MTIcon(var a: TMessage);
var P: TPoint;
begin case a.lParam of WM_LBUTTONDBLCLK: begin Show;
SetForegroundWindow(Handle);
end;
WM_RBUTTONDOWN: begin GetCursorPos(P);
PopupMenul.Popup (P.X, P.Y);
end;
end;
end;
procedure TForml.MRestoreClick(Sender: TObject);
begin Show;
end;

procedure TForml.MCloseClick(Sender: TObject); begin

Close; end; .

procedure TForml.MDeleteClick(Sender: TObject); begin

Shell_Notifylcon(NIM_DELETE, @NID);
BCreate.Enabled := true;
BDelete.Enabled := false;
BHide.Enabled := false;
Show;
end;

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

Приемы программирования в Delphi на основе VCL



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

  • Март
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс