Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Пропадает иконка из трея


Автор: mspuz 8.5.2007, 17:17
Прячу программу, а втрее помещаю иконку. Но так получается, что иконка в некоторых случаях не появляется в трее smile . А в программе зашита защита на запуск только одной версии. В результате пользователь не может запустить новую версию, так как в процессах висит "невидимая" программа. Можно ли проверять, что при скрытии программы иконка на месте?

Автор: ama_kid 8.5.2007, 19:30
Зачем бороться со следствием, если бороться надо с причиной? Лучше проверь код. При правильном кодировании иконка в трее появляется всегда (хотя она может исчезнуть в определенном случае - с этим бороться надо http://forum.vingrad.ru/forum/topic-140925/hl/taskbarcreated/index.html)

Автор: valentos 8.5.2007, 21:19
mspuz , у меня кде-то валялся компонент для сворачивания проги в трей!
Могу скинуть, если найду?!

Автор: ama_kid 8.5.2007, 22:19
valentos
А зачем он нужен? Чтобы чужие баги ловить? smile Код, который помещает/удаляет иконку в трей - занимает всего-то 25-30 строчек от силы:
Код
function SetIconInTray: boolean;
var
 nid:PNOTIFYICONDATA;
begin
 new(nid);
 nid.cbSize := sizeof(nid);
 nid.szTip:='Мой Хинт';
 nid.hIcon := Application.Icon.Handle;
 nid.Wnd := fmMain.Handle;
 nid.uID := id_MyIcon;
 nid.uFlags := NIF_ICON or NIF_TIP;// or NIF_MESSAGE;
// nid.uCallbackMessage := WM_MyMessTray;    // Нужно, если требуется отлавливать сообщения от иконки
 Result:= Shell_NotifyIcon(NIM_ADD, nid);
end;

function DeleteIconFromTray: boolean;
var
 nid:PNOTIFYICONDATA;
begin
 new(nid);
 nid.cbSize := sizeof(nid);
 nid.Wnd := fmMain.Handle;
 nid.uID := id_MyIcon;
 Result:= Shell_NotifyIcon(NIM_DELETE, nid);
end;

Автор: dumb 9.5.2007, 00:52
Цитата(mspuz @  8.5.2007,  17:17 Найти цитируемый пост)
Но так получается, что иконка в некоторых случаях не появляется в трее

момент для установки иконки в трей неправильно выбрал. если не мудрствовать, то код добавления поставь на таймер с Interval=1.

Добавлено через 4 минуты и 18 секунд
эм. забыл добавить: после срабатывания таймера отключи его(в Timer1Timer сделать Interval:=0)...

Автор: valentos 9.5.2007, 20:08
ama_kid , кому-как, я например не вижу смысла писать 30 строк исли мона кинуть на форму компонент и спокойно пойти попить чаю!

Автор: Yanis 9.5.2007, 20:52
Кто хотел узнать почему про нас сишники байки травят? smile
Цитата(valentos @  9.5.2007,  21:08 Найти цитируемый пост)
ama_kid , кому-как, я например не вижу смысла писать 30 строк исли мона кинуть на форму компонент и спокойно пойти попить чаю! 

Автор: ama_kid 9.5.2007, 20:58
Цитата(valentos @  9.5.2007,  20:08 Найти цитируемый пост)
ama_kid , кому-как, я например не вижу смысла писать 30 строк исли мона кинуть на форму компонент и спокойно пойти попить чаю! 
Ну да, сходи, попей чаю, чтобы потом с новыми силами разгребать чужой код размером в сотни строк в поисках - почему  же
Цитата(mspuz @  8.5.2007,  17:17 Найти цитируемый пост)
иконка в некоторых случаях не появляется в трее
 smile  smile  smile 

Автор: sw04 11.5.2007, 01:37
Не появляется потому что не срабатывает функция добавления иконки в трее.
Проверь код. Могу подсобить, аська в профиле, обращайся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)