| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проблема с TEdit в сервисе |
| Автор: Darbort 7.5.2006, 18:40 |
| Я пишу программу, которая работатет, как сервис. В сервисе есть поле (TEdit) в которое нужно ввести данные, НО при нажатии на клавиши в поле ничего не печатается! Причём копки "Delete", "Home", "End" прекрасно работают (контекстное меню работает, если вставить с помощью него текст, то всё прекрасно отображается). Проблема не только с TEdit, но и с остальными стандартными компонентами ввода. Сервис делал стандартными средствами Delphi. Можно ли что-нибудь сделать?... |
| Автор: Poseidon 7.5.2006, 18:57 |
| Можно. Семнадцатую строчку попровь |
| Автор: Демо 7.5.2006, 19:05 |
Не писать сервисы с формами ввода. |
| Автор: Darbort 7.5.2006, 20:50 |
| Спасиб пацаны, вы здесь все такие умные? |
| Автор: Демо 7.5.2006, 21:20 |
Я тебе ответил максимально точно и корректно. Коли после этого у тебя только такие вопросы возникают, то что ж тут поделаешь. |
| Автор: Dimannn 7.5.2006, 21:35 |
Это как именно? Скорее всего не принимаюся сообщения для окон. Прочти http://forum.vingrad.ru/index.php?showtopic=15895&view=findpost&p=104353 |
| Автор: Darbort 7.5.2006, 23:28 | ||||||||
Какой тут код приводить? SvcMgr.pas постить что ль?
Это выход? Не смеши... - Я не умею плавать. - Так не учись... Тоже самое по-моему. Самому не нравится в сервисе форму юзать, но по другому ещё хуже
File->New->Other... Потом ServiceApplication В общем я пока понял, что не обрабатываеются сообщения WM_CHAR; Попробывал сделать так: Бросил TTimer на форму и в OnTimer:
Как ни странно заработало Появилась идея не перехватывать всё в подрят, а только нужное То есть procedure HKlav(var msg: TMessage); message WM_CHAR; Но на WM_CHAR он не реагирует, может какое ещё сообщение? |
| Автор: Демо 8.5.2006, 01:00 |
Именно выход. Сервис не предназначен для программирования с VCL. И вообще для оработы с окнами. А если ты хочешь все-таки писать интерфейс с пользователем именно в сервисе - забудь про VCL. Да и это будет "через задний проход". |
| Автор: XSInet 8.5.2006, 04:36 | ||
Это делается в while цикле. Пиши на WinAPI |
| Автор: Darbort 8.5.2006, 08:24 | ||
| Согласен, это просто извращение писать сервис с VCL... В общем или WinAPI или на два приложения разделять (через мессаги им общатся, кста никто не знает, как через пайпы параметры передавать? Возможно ли это? Проверить на вторую копию легко, а с передачей что-то не выходит), то есть два раза "через задний проход"
Ну, если я сделаю так, то прога будет бесконечно долго в подвешенном состоянии Всё же ещё помучась... прям загадка, даже OnKeyDown для TEdit сробатывает, а дальше ни в какую. Как всегда |
| Автор: Guedda 8.5.2006, 08:26 | ||
Можно это обойти, написав:
|
| Автор: Darbort 8.5.2006, 08:40 | ||
Нет, ну вы меня окончательно прикалываете У TApplication в SvcMgr.pas НЕТ ProcessMessages! Если использовать TApplication из Forms, то процедура ProcessMessages работает не корректно, если не сказать вообще не работает. То есть буковки печатаются, а всё остальное виснет включая рабочий стол... |
| Автор: Демо 8.5.2006, 12:19 |
Писать сервис в VCL - не извращение. Извращение - писать сервис с пользовательским интерфейсом. Я ж написал - если тебе так нужен интерфейс с пользователем в сервисе - реализуй этот интерфейс в окнах WinAPI32. Тебе нужна глючная программа? - Тогда используй VCL для этого. Добавлено @ 12:19 А давать советы для написания заведомо глючной программы - уволь. |
| Автор: Darbort 8.5.2006, 15:33 |
| Увольняю Спасиб всем. |
| Автор: Dimannn 15.5.2006, 17:39 |
Я писал - у меня всё было нормально, ничё не глючило. |
| Автор: Демо 15.5.2006, 17:43 |
Вряд ли. Приведи пример. Добавлено @ 17:46 Добавлю, что глюки VCL-форм в дополнительном потоке гарантированы без всяких примеров. |
| Автор: Dimannn 15.5.2006, 17:52 |
| Создаём сервис, создаём форму, в онстарт пишем Form1.Show и радуемся... Я путался фтп-сервер запихнуть, он у мменя нормально работал |
| Автор: Демо 15.5.2006, 21:27 |
| Dimannn, Я бы все-таки предложил тебе запостить код самого простого примера с формой в сервисе, чтобы можно было говорить предметно. |