![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Иконка и сервис [D7, XP]
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] + потому что код помещения иконки самим сервисом будет совсем не прост. Ведь в систему может войти одновременно несколько пользователей - придется отслеживать этот момент, потом как то разруливать от иконки какого юзера пришел клик и т.д.