Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Вниз

TService и визуализация форм   Найти похожие ветки 

 
BBCHa ©   (2005-07-10 21:17) [0]

Народ, помогите решить задачу:
В проекте есть:
1. Объект типа TService - основной элемент приложения.
2. Объект типа TForm - окно, позволяющее задавать параметры сервиса.

Подскажите, как мне визуализировать форму? Show и тому подобное не катит. Чего делать???


 
Eraser ©   (2005-07-10 21:47) [1]

BBCHa ©   (10.07.05 21:17)

Действия, выполняемые в TService и объект класса TForm "находятся" в разных потоках, поэтому обращаться напрямую из сервиса к форме нельзы.

Подскажите, как мне визуализировать форму?

Самый простой способ - послать форме соотв. сообщение - WM_SHOWWINDOW.


 
Юрий Зотов ©   (2005-07-10 22:23) [2]

> BBCHa ©   (10.07.05 21:17)  

> Чего делать???

Я бы пересмотрел подход и разбил программу на три отдельных.

1. Сам сервис. Пишется без использования VCL. Работает без всякой визуализации. При своем старте берет настройки из реестра (а если их там нет, то использует дефолтные настройки).

2. Апплет Панели Управления. Пишется с использованием VCL. Содержит ту самую настроечную форму. При старте считывает настройки из реестра (а если их там нет, то создает в нем дефолтные настройки) и показывает их. Если нажата кнопка "Отмена", то не делает ничего и просто закрывается. Если нажата кнопка "ОК", то пишет новые настройки в реестр вместо старых и  перезапускает сервис (чтобы тот перечитал настройки), а затем все равно закрывается.

3. Программа, вешающая иконку в трей. Пишется без использования VCL. При двойном клике по иконке запускает тот самый апплет Панели Управления. Больше не делает ничего.

Примечания.

1. При разработке код, работающий с реестром, выносится в отдельный модуль. Этот модуль используется и в самом сервисе, и в апплете Панели Управления. В итоге сокращается объем исходников и обеспечиваются одинаковые дефолтные настройки и для сервиса, и для апплета.

2. Среди настроек есть птичка "Показывать иконку в трее". Если она установлена, то апплет при нажатии кнопки "ОК"  прописывает в реестре автозапуск соответствующей пограммы и стартует ее. Если снята - наоборот, завершает эту программу и убирает ее автозапуск из реестра. В этом случае юзер все равно может производить настройти, запуская апплет вручную.

В чем вижу преимущества такого подхода?

1. Достигается минимальный размер резидентного кода. Размер апплета роли не играет - он нерезидентный и используется редко.

2. Функциональность четко разделена - каждая программа комплекса делает только то, что по логике положено именно ей и не делает ничего другого. То есть - легче проектировать, легче программировать, легче отлаживать, легче модернизировать, меньше вероятность ошибок.

3. Исходный вопрос взаимодействия сервиса с десктопом исчезает в принципе и навсегда.

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

5. Соблюдена профессиональная идеология построения сервисов Win32.


 
BBCHa ©   (2005-07-10 22:34) [3]

А если помимо настроек нужно в ходе работы сервиса выводить промежуточный результат в Mеmo который расположен в окне?


 
Eraser ©   (2005-07-10 22:37) [4]

BBCHa ©   (10.07.05 22:34) [3]

Тогда Interactive и вперёд.


 
Alex Konshin ©   (2005-07-11 10:33) [5]

Тогда другое приложение должно получить данные от сервиса и показать. Получить можно, например, через named pipe.
Сервисы не должны заниматься визуализацией - это не их задача.


 
DiamondShark ©   (2005-07-11 11:24) [6]


> А если помимо настроек нужно в ходе работы сервиса выводить
> промежуточный результат в Mеmo который расположен в окне?

А нафига они там нужны?
Сервис предназначен для работы в необслуживаемом режиме. Зачем ему окна? Кто на них смотреть будет?


 
Юрий Зотов ©   (2005-07-11 11:31) [7]

> BBCHa ©   (10.07.05 22:34) [3]

> А если помимо настроек нужно в ходе работы сервиса выводить
> промежуточный результат в Mеmo который расположен в окне?

То сервис пишет эти промежуточные результаты в лог, а этот лог показывает либо отдельное приложение (запускаемое вторым пунктом меню из SysTray), либо все тем же апплетом.


 
DiamondShark ©   (2005-07-11 12:09) [8]

Вопрос для раздумий.
NT -- в принципе, многопользовательская система, с компьютером может работать одновременно несколько интерактивных пользователей.
Вопрос: при наличии нескольких активных пользователей кому сервис должен показывать окно? Кому показывать окно, когда нет ни одного пользователя?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.068 c
14-1120741238
Piter
2005-07-07 17:00
2005.07.31
Посоветуйте книжку по базам данных


4-1117796672
webpauk
2005-06-03 15:04
2005.07.31
Указатели и DirectDraw


14-1120629165
YurikGL
2005-07-06 09:52
2005.07.31
США оставили себе контроль над интернетом


6-1114022677
Ospa
2005-04-20 22:44
2005.07.31
TidPop3 tidsmtp


3-1118921580
Сергей2
2005-06-16 15:33
2005.07.31
Использование процедуры из package





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский