Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.02.2008, 15:21
Аватар для NCD
NCD NCD вне форума
Новичок
 
Регистрация: 31.12.2007
Адрес: РОССИЯ
Сообщения: 53
Репутация: 10
Печаль О трее

Доброго времени суток!
Помогите пожалуйста разобраться с иконкой на TrayBar'е.
Я нашёл вот это :
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button3Click(Sender: TObject);
var
  no: TNotifyIconData;
  Hicon1: HIcon;
begin
  //Помещение иконки в Tray Bar
  HIcon1:=ExtractIcon(Handle,'NsS.ico',0);
  with no do
  begin
    cbSize:=Sizeof(TNotifyIconData);
    Wnd:=Handle;
    uID:=0;
    UFlags:=NIF_MESSAGE+NIF_ICON+NIF_TIP;
    SzTip:='NsS';
    HIcon:=HIcon1;
    //Определяемое пользователем сообщение
    uCallBackMessage:=WM_USER+0;
  end;
  Shell_NotifyIcon(NIM_ADD,@no);
end;

Всё работает, иконка появляется, но я не могу понять, как добавить какое-то действие или контекстное меню к иконке. Подскажите, если кто знает
Если существуют способы лучше, чем у меня, напишите...
Заранее спасибо!
Ответить с цитированием
  #2  
Старый 02.02.2008, 18:10
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Shell_NotifyIcon принимает два параметра: dwMessage - идентификация действия, которое надлежит выполнить (NIM_ADD - добавить иконку в трей, NIM_DELETE - удалить, NIM_MODIFY - изменить) и указатель на запись типа TNotifyIconData. Эта запись выглядит так (описана в ShellAPI):
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
TNotifyIconDataA = _NOTIFYICONDATAA;
TNotifyIconData = TNotifyIconDataA;
_NOTIFYICONDATAA = record
  { размер записи }
  cbSize: DWORD;
 
  { идентификатор окна, которое будет получать
    сообщения о нажатиях и перемещениях мыши на иконке в трее
  Wnd: HWND;
 
  { номер пиктограммы. Если вы размещаете только одну иконку - указываете 0 }
  uID: UINT;
 
  { флаги (NIF_ICON, NIF_MESSAGE, NIF_TIP) }
  uFlags: UINT;
 
  { сообщение, которое посылается окну при
     попадании мыши на иконку в трее }
  uCallbackMessage: UINT;
 
  { Хэндл иконки }
  hIcon: HICON;
 
  { текст всплывающей подсказки }
  szTip: array [0..63] of AnsiChar;
end;
Размещаете иконку в трей, как сделано у вас в примере, у окна приложения определяете функцию, которая будет слушать сообщения от иконки. В этом сообщении wParam - номер пиктограммы (если она одна, то ноль), в поле lParam - информация о том, что там случилось с иконкой (какую кнопку мыши нажали) - константа типа WM_* (можно посмотреть в файле Messages.pas). По окончании работы приложения убираете иконку из трея. Вроде все.
Ответить с цитированием
  #3  
Старый 03.02.2008, 13:19
Аватар для NCD
NCD NCD вне форума
Новичок
 
Регистрация: 31.12.2007
Адрес: РОССИЯ
Сообщения: 53
Репутация: 10
По умолчанию

А не могли бы Вы написать пример?, потому что с моим уровнем познаний в этой области понять принцип работы достаночно тяжело, а с примером "на руках" я разберусь гораздо быстрее...
Ответить с цитированием
  #4  
Старый 03.02.2008, 17:04
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Вот вам пример на скорую руку. Приложение при минимизации "прячется" в трей и реагирует на мышку: двойной клик левой кнопкой - восстановление, одинарный правой - отображение контекстного меню.

Чтобы не переусложнять текст, я не стал тут приводить действия для смены иконки, если нужно - спрашивайте, я объясню отдельно. Ничего сложного тут нет, на самом деле.
Вложения
Тип файла: zip SysTrayProjectD7.zip (3.7 Кбайт, 103 просмотров)
Ответить с цитированием
  #5  
Старый 03.02.2008, 20:40
DrFelix DrFelix вне форума
Прохожий
 
Регистрация: 03.02.2008
Сообщения: 1
Репутация: 10
По умолчанию

Спасибо, и мне очень пригодилось
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025