powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как убрать значек в трее?
19 сообщений из 44, страница 2 из 2
Как убрать значек в трее?
    #33159327
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что, больше предложений нет? Проблема осталась...

Viman
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как убрать значек в трее?
    #39767589
LastFornit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
viman,

У меня паллиативное решение.
Не техническое, а, скорее, логическое.

Мы же когда запускаем свою программу, то точно знаем handle(Wnd) создаваемой нами же иконки в трее.
Значит, мы можем сохранить(например в реестр или в файл аппдаты) значение того самого хэндла.
Этого достаточно, чтоб при следеющем запуске программы мы сначала убили бы старую иконку, а уже только потом создали новую.
Т.е. другими словами, мы код из FormDestroy переносим/дублируем/вызываем при старте приложения, но со старым хэндлом.

Проверил на Винде 7 32-разрядной, всё работает.

Минусы:
1. Одна лишняя иконка в трее всё же будет висеть, т.к. убивается она только при новом запуске, а не при закрытии программы.
2. Если запущено несколько копий приложения, то нужно делать дополнительные проверки на handle.
3. Да и вообще много проверок: чтоб существовал такой хэндл; чтоб он не был равен другому новону хэндлу какого-нибудь другого процесса; чтоб в случае ошибки exception корректно обрабатывалась, а не валила программу при старте из-за такой мелочи...

Код: pascal
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
procedure TMainForm.InitTrayIcon;//процедура добавления иконки в трей
var TrayIconDataOld: TNotifyIconData;
begin

  try
  if GetHandleOld <> 0 then //GetHandleOld(пишем сами под себя)  - получаем хэндл, сохранённый в прошлый раз
    begin
      with TrayIconDataOld do//
      begin
        cbSize:= SizeOf(TrayIconDataOld);
        Wnd:= GetHandleOld;  //GetHandleOld  - получаем и присваиваем хэндл, сохранённый в прошлый запуск прграммы
        uID:= 0;
        uFlags:= NIF_MESSAGE + NIF_ICON + NIF_TIP;
        uCallbackMessage:= WM_ICONTRAY;
        hIcon:= Application.Icon.Handle;
        szTip:= 'Имя моей программы или имя твоей мамы';
      end;
      Shell_NotifyIcon(NIM_DELETE, @TrayIconDataOld);//удаляем старую иконку из трея(этот код у меня в FormDestroy)
    end;
  except
  end;

  with TrayIconData do //а тут мы создаём новую иконку
  begin
    cbSize:= SizeOf(TrayIconData);
    Wnd:= Handle;     //здесь Handle = Self.Handle на форме.
    uID:= 0;
    uFlags:= NIF_MESSAGE + NIF_ICON + NIF_TIP;
    uCallbackMessage:= WM_ICONTRAY;
    hIcon:= Application.Icon.Handle;
    szTip:= 'Имя моей программы или имя твоей мамы';
  end;
  Shell_NotifyIcon(NIM_ADD, @TrayIconData);//добавляем новую иконку

  SetHandleOld(Handle);//и сохраняем Handle куда-нибудь

end;
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39767666
LastFornit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
viman,

я только что дату посмотрел. Боже, чувак, надеюсь, что ты ещё жив.
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39871939
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LastFornit,

ахренеть :) проблему кстати решил... 14 лет назад )
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39871994
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vimanLastFornit,
ахренеть :) проблему кстати решил... 14 лет назад )
Ну так распиши, как решил? Для потомков.
А то как в анекдоте: все посылают в гугл, а там только ссылки на посты, в которых посылают в гугл...
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39871996
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Офигеть, viman, оказывается, еще "живой".
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39871998
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpvimanLastFornit,
ахренеть :) проблему кстати решил... 14 лет назад )
Ну так распиши, как решил? Для потомков.
А то как в анекдоте: все посылают в гугл, а там только ссылки на посты, в которых посылают в гугл...

прицепил файл, подпилено мной сто лет тому для работы в x64 системах. Оригинал для x86 с сайта Rouse был взят, не помню уже.
На Вин7 и ниже работает, выше - не проверял, но по идее тоже должно работать.

Проверяет все иконки, те, что зомби - пристреливает.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure Kill_empty_tray_icons;
var
  SysTray: TFWSysTrayInfo;
begin
  SysTray := TFWSysTrayInfo.Create;
  SysTray.UpdateInfo;
  if SysTray.HaveIncorrectIcons then
   SysTray.UpdateAllIcons;
  SysTray.DisposeOf;
end;
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872188
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

вот весь код программы, может кому пригодится. Я выложил в опенсорс
https://sysadminblog.ru/soft/2010/12/08/monitoring-setevyh-resursov---shareview.html
https://github.com/zheltovanton/shareview
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872190
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а хотя, почитал что за проблема была, не помню даже победил ее или нет :) в любом случае, эти проекты давно ушли в историю...
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872234
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r
Код: pascal
1.
 TFWSysTrayInfo;



мне интересно, когда Delphi научится находить модули для Uses
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872388
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имя юнита не равно имени класса.
Что тебя так удивило-то?
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872427
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rимя юнита не равно имени класса.
Что тебя так удивило-то?
Я так понимаю он хочет чтобы среда ему по имени класса искала юнит, в котором он объявлен.
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872430
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оказывается, в Дельфах надо прописывать имя юнита.
Вот это поворот!

P.S. Потому что не надо привыкать к авто-подкидываю юнитов от визуальных компонентов. Ручками, все ручками.
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872437
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11мне интересно, когда Delphi научится находить модули для Uses
Когда это разучится делать гугл
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872475
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11Vizit0r
Код: pascal
1.
 TFWSysTrayInfo;



мне интересно, когда Delphi научится находить модули для Uses

А зажать Ctrl + клик по 'TFWSysTrayInfo', уже не работает? У меня в XE3 работает, открывает вкладку окна с кодом юнита.
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872528
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky SergeX11пропущено...
мне интересно, когда Delphi научится находить модули для Uses
А зажать Ctrl + клик по 'TFWSysTrayInfo', уже не работает? У меня в XE3 работает, открывает вкладку окна с кодом юнита.
Даже если нужного юнита нет в uses модуля? Серьёзно?
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872582
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvpBelotsky Sergeпропущено...

А зажать Ctrl + клик по 'TFWSysTrayInfo', уже не работает? У меня в XE3 работает, открывает вкладку окна с кодом юнита.
Даже если нужного юнита нет в uses модуля? Серьёзно?

На этот случай есть Ctrl+F1. :) Дальше Copy-Paste. Но это довольно редко приходится делать, в основном для невизуальных компонентов и для dll.
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872615
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r. Потому что не надо привыкать к авто-подкидываю юнитов от визуальных компонентов. Ручками, все ручками.Потому, что нужно писать нормальные IDE
X11мне интересно, когда Delphi научится находить модули для UsesТут рекламировали плагин для IDEA - пробуй
...
Рейтинг: 0 / 0
Как убрать значек в трее?
    #39872654
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Потому, что нужно писать нормальные IDE
со встроенным ИИ?
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как убрать значек в трее?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]