Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не получается добавить значек в трей.


Страницы:   1 2

Ego ©   (2004-12-20 08:37:00) 

Здравствуйте, всем.Я пытаюсь добавить пиктограмму в панель резидентов:

..
const MyTryIcon = WM_USER+1;
..
uses Unit2, Unit3, Unit4, ShellAPI;
var  NID : TNotifyIconData;
..
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowRgn(handle,CreateRoundRectRgn(0,0,width,height,30,30),true);
with NID do
 begin
 cbSize:=SizeOf(TNotifyIconData);
 Wnd:=Handle;
 uId:=1;
 uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
 uCallbackMessage:=MyTryIcon;
 hIcon:=Application.Icon.Handle;
 szTip:='';
 end;
Shell_NotifyIcon(NIM_ADD,@Icon);
end;

Происходит следующее: после выполнения Shell_NotifyIcon в трее выделяется место, но иконка не появляется и трей сразу возвращается в исходное состояние - без моего значка...Подскажите, пожалуйста, в чем я ошибаюсь?


Piter   (2005-02-14 19:32:00) [1]

sniknik ©   (14.02.05 1:57) [37]
дело в том что я про это вобще не думал при ответе, тем более до этого


подожди. Какая разница о чем ты думал? :)
Ты сказал:

sniknik ©   (12.02.05 23:37) [32]
может дополнительно регистрить окно надо


что значит дополнительно и может? Окно регистрировать надо по любому, а не может!


Grief   (2005-02-14 07:26:00) [2]

Озарение было сразу, но написать ответ пришло не сразу....


sniknik   (2005-02-14 01:57:00) [3]

> ни фига себе угадал...
угадал угадал. ;о)) дело в том что я про это вобще не думал при ответе, тем более до этого > [31] было сказано, окно есть и его видно на экране... т.е. все ок.
т.что про нее я сказал наугад, на всякий случай.


Piter   (2005-02-13 22:16:00) [4]

О нуле я написал еще в 12.02.05 16:28
И больше дня потребовалось, чтобы проверить это! И только в 13.02.05 22:11 озарение.

Отпадает всякое желание помогать вообще.


Grief   (2005-02-13 22:11:00) [5]

Ой, товарищи мастера, я сожалею, что нагнал здесь всякой пурги, но дело в том, что я просто банально недоглядел... этож надо, вызывать InitializeTray раньше, чем CreateWindowEx, of course handle = 0!!! Ламер я, ой ламер, пора уходить на пенсию))))


Piter   (2005-02-13 21:42:00) [6]

sniknik ©   (13.02.05 14:32) [33]
т.е. про регистрацию я угадал


ни фига себе угадал... А как ты еще создащь окно какого-то класса (не стандартного), если не зарегистрируешь его?!
Какое тут блин гадание...


sniknik   (2005-02-13 14:32:00) [7]

> да мало ли еще что, неохота вникать.
не выдержал, проверил ;о)), сделал на "чистом" winapi форму (вернее переделал имеющийся пример, "усек" его по размеру), передал ее хендл значку... как и ожидалось работает.
у тебя точно чтото не то с созданным окном, показал бы все, как создаеш, а то одна приведенная тобой функция не может быть, она возвращает 0.
в примере (моем) кроме этого регистрится класс окна (т.е. про регистрацию я угадал ;), а вот специальных событий не нужно (стандартный обработчик только). и WS_Popup это случаем не окно для всплываюхих менюшек? вряд ли оно тогда подойдет (хотя, не знаю, может и подойдет, проверять опять ломает ;) просто логически, не для того оно).


sniknik   (2005-02-12 23:37:00) [8]

значит чтото не то туда пишеш, вот попробуй вышепреведенный пример там где от стандартного окна Form1.Handle вносится, не будет изчезать.

а у тебя, х.з, может действительно 0 возврашает (хотя если окно видно, то не должно ошибки вроде нет), может дополнительно регистрить окно надо, либо в обрабочик событий "ответ" системе вставлять. да мало ли еще что, неохота вникать.


Grief   (2005-02-12 23:06:00) [9]

Существует, см выше, я его не убиваю... оно даже на экране есть.


sniknik   (2005-02-12 22:44:00) [10]

> а когда на нее курсор наводишь - исчезает.
100% хендла не сушествует,
к примеру если нормальное приложение "срубить" так чтобы оно не успело свою иконку снять, ее снимет система при проводке над иконкой мышиным курсором.
у тебя видимо окна изначально не сушествует/другой хендл пишеш/окно уничтожаеш после создания иконки в обшем несответствие.

> а что сделать можно?
окно, чей хендл используется, должно существовать все время пока иконка используется.


Grief   (2005-02-12 22:11:00) [11]

>Чему равно MainWnd после вызова CreateWindowEx? Не ноль, случайно?
Возможно... до меня доходит.... а что сделать можно?


Eraser   (2005-02-12 20:56:00) [12]

Piter ©
Написать код для помещения иконки в трей - дело минуты.


Нельзя не согласиться. Но когда необходимо "прикрутить" к этой иконки менюшку, обработку различных кликов различными кнопками, анимацию, baloon hint и т.д. эта задача выливается в немаленнький код с кучей патенциальных дыр.
Так вот, ИМХО, лучше энтузиазм тратить на более полезные вещи, чем на копирование RxLib и JEDI VCL, опять же имхо...


Piter   (2005-02-12 16:28:00) [13]

Eraser ©   (12.02.05 11:50) [26]
Всё равно всё закончиться установкой готовых компонентов...имхо.


вот именно, что имхо. Написать код для помещения иконки в трей - дело минуты. Ставить для этого какие-то компоненты...

Grief ©   (12.02.05 9:45) [25]
MainWn


Чему равно MainWnd после вызова CreateWindowEx? Не ноль, случайно?


Eraser   (2005-02-12 11:50:00) [14]

Ego
Всё равно всё закончиться установкой готовых компонентов...имхо.
Так что советую JEDI VCL.


Grief   (2005-02-12 09:45:00) [15]

У меня вопрос есть, имитирую: сделал все как надо, а потом... а потом - ничего, в трее появляется еще одна иконка, а когда на нее курсор наводишь - исчезает. В качестве NotifyIconData.WND я использую окно, созданное
MainWnd:=CreateWindowEx(WS_EX_AcceptFiles, 'WinMin : Main', 'The Launcher', WS_Popup, CW_USEDEFAULT, CW_USEDEFAULT, Display.Width, Display.Height, 0, 0, Hinstance, nil);

Почему так?
P.S. Лучше использовать не WM_USER (может быть конфликт) а RegisterWindiwMessage


grom   (2005-01-08 18:17:00) [16]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1104563793&n=0


Piter   (2005-01-08 18:15:00) [17]

VMcL ©   (08.01.05 16:55) [21]
Клиент глючит?


да не туда ткнул просто :)
Есть у него такая особенность...


Eraser   (2005-01-08 17:00:00) [18]

В нете полно готовых рабочих компонентов. torry.ru например


VMcL   (2005-01-08 16:55:00) [19]

>> Piter ©  (08.01.05 16:51) [20]

[offtopic]
Клиент глючит?
[/offtopic]


Piter   (2005-01-08 16:51:00) [20]

VMcL ©   (08.01.05 10:11) [18]
И как мне сделать чтобы заработало ?


определить процедуру с messageу метода класса (у формы, например)?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо