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

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

Иконка и сервис [D7, XP]


Страницы:   1 2

BBCHa ©   (2008-01-28 15:22:00) 

Всем привет!

Очень хочется, чтобы при запуске сервиса в трее появлялась иконка. Однако что- бы я не делал (использование компонентов иконок, использование API) не помогало. Иконка не выводится?

Подскажите, друзья, почему? Это кривизна рук, недостаток мозгов или есть какая-то фишка?

Заранее спасибо.


Dennis I. Komarov   (2008-01-30 13:05:00) [1]

Особено нравится:
> Короче, смотри:

аля, не слушай ты этих придурков :(


ketmar   (2008-01-30 13:02:00) [2]

>[28] mrFreeman2007(30.01.08 12:57)
а то, что ты сначала ветку почитал бы, а потом писал. чтобы не конфузиться при всём народе. да хотя бы полностью [0] почитал, ага.


mrFreeman2007   (2008-01-30 12:57:00) [3]

А что?! Он спросил, я ответил.


Palladin   (2008-01-30 12:55:00) [4]

Уау. Преклоняюсь пред тобой! О, Великий!


ketmar   (2008-01-30 12:55:00) [5]

обалдеть. пришёл и решил все проблемы одним махом. ветку, конечно, почитать не удосужился…


mrFreeman2007   (2008-01-30 12:52:00) [6]


> Очень хочется, чтобы при запуске сервиса в трее появлялась
> иконка.

Короче, смотри:

uses shlobj, shellapi;

const
 wm_mytraynotify = wm_user+123;

procedure TrayIconCreate;
var
nidata:tnotifyicondata;
begin
with nidata do begin
  cbsize:=sizeof(TNotifyicondata);
  wnd:=self.Handle;
  uid:=3;
  uflags:=nif_icon or nif_message or nif_tip;
  ucallbackmessage:=wm_mytraynotify;
  hicon:=application.Icon.Handle;
  sztip:='Моя Трей-иконка';
end;
shell_notifyicon(nim_add,@nidata);
end;

procedure TryIconDelete;
var
nidata:tnotifyicondata;
begin
with nidata do begin
  cbsize:=sizeof(tnotifyicondata);
  wnd:=self.Handle;
  uid:=3;
end;
shell_notifyicon(nim_delete,@nidata);
end;

Дальше думай сам.


Skyle   (2008-01-29 10:21:00) [7]


> Dennis I. Komarov ©   (29.01.08 09:40) [23]
> > [22] Skyle ©   (29.01.08 06:21)
>
> И нечего им там делать

А я и не спорил. Я только сказал, что мегасервис автора ветки с иконкой будет работать в висте совсем не так, как автор этого ожидает :)


Dennis I. Komarov   (2008-01-29 09:40:00) [8]

> [22] Skyle ©   (29.01.08 06:21)

И нечего им там делать


Skyle   (2008-01-29 06:21:00) [9]

А в висте, говорят, сервисам вообще запрещено на рабочий стол ходить...


Slym   (2008-01-29 04:24:00) [10]

DVM ©   (28.01.08 15:56) [14]
Например через именованные каналы или сокеты

я бы предпочел COM


Семеныч   (2008-01-28 17:06:00) [11]

Когда делал такую задачу, исходил вот из чего.

1. Сервис. Самая ответственная часть всего комплекса, поэтому должен быть как можно более простым (поскольку давно известно: чем проще - тем надежнее). Пашет постоянно, поэтому должен жрать минимум ресурсов - значит, пишем сервис на чистом API. Никаких TServiceApplication, никаких иконок и никаких рабочих столов.

2. CPL. Запускается редко и ненадолго, поэтому размер неважен. Важнее скорость разработки - поэтому лепим CPL в стиле RAD ("палитра-мышка-форма"). При нажатии OK должна изменить настройки сервиса в реестре и перезапустить сам сервис. Если проставлена птичка "показывать иконку", то прописать SysTray'ную программу в автозапуск, если нет - убрать ее из автозапуска.

3. Иконка в SysTray. Тоже пашет постоянно, поэтому тоже должна жрать минимум ресурсов - значит, тоже пишем чистом API. Задача - при двойном клике вывести меню с двумя пунктами - запуск CPL и выход. Больше ничего, не надо, все остальное сделает CPL.


Anatoly Podgoretsky   (2008-01-28 17:00:00) [12]

> BBCHa  (28.01.2008 15:42:08)  [8]

Нельзя это пользовательская привилегия.


Сергей М.   (2008-01-28 16:11:00) [13]


> DVM ©   (28.01.08 16:09) [17]


У уж это, imho, лишнее.

CPL вполне может совмещать и запуздыривание, и обмен с юзером, и обмен с сервисом.


DVM   (2008-01-28 16:09:00) [14]


> Лучше всего если это "еще одно" будет приложением-апплетом
> панели управления.

Еще лучше апплет отдельно, а индикатор состояния в трее - отдельно.


Сергей М.   (2008-01-28 16:07:00) [15]


> BBCHa   (28.01.08 15:54) [13]
>
>


> что тогда сервису прикрутить для выполнения этих действий?


Ничего не надо "прикручивать".
Иконки нужны сервису как корове седло.
Иконки нужны приложению, непосредственно взаимодействующему с пользователем.

см. [15]

т.е. готовься разрабатывать как еще одно приложение.
Лучше всего если это "еще одно" будет приложением-апплетом панели управления. Делфи, кстати, предлагает для этой цели готовый визард, создающий заготовку такого приложения.


Palladin   (2008-01-28 15:56:00) [16]

1. разработать протокол взаимодействия сервиса и управляющего приложения
2. написать поддержку на строне сервиса
3. написать приложение (которое и будет пихать иконку туда где часики)


DVM   (2008-01-28 15:56:00) [17]


> А что тогда сервису прикрутить для выполнения этих действий?
> ??

Интерфейс для взаимодействия с ним. Например через именованные каналы или сокеты.


BBCHa   (2008-01-28 15:54:00) [18]


> Сергей М.


А что тогда сервису прикрутить для выполнения этих действий???


Сергей М.   (2008-01-28 15:48:00) [19]


> Есть некий сервис, работающий с Com-портом


Ну есть он и есть.
Нафига емуиконка ?


> необходимо, не останавливая сервис отключиться от порта,
>  подключиться к нему, переключиться на другой ком


Нафига сервисудля этого иконка ?

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


DVM   (2008-01-28 15:46:00) [20]


> homm ©   (28.01.08 15:33) [4]

[5] + потому что код помещения иконки самим сервисом будет совсем не прост. Ведь в систему может войти одновременно несколько пользователей - придется отслеживать этот момент, потом как то разруливать от иконки какого юзера пришел клик и т.д.


Страницы:   1 2

Наверх

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