Самый бедный раздел форума! Мне его жаль! Давайте раскачаем тему про delphi чтоли, а то есть же люди у нас, которые шарят!
Вот вобщет тема темы
Есть у меня такие мыслишки:
Что, если сделать в делфи программку для конструкций mmb скрипта для работы с некоторыми плагинами! Т.е. есть там плагин RichEdit, TabPanel... чтобы избавиться от нудного написания кода, можно взять эту программку, где есть список всех функций и кода к ним, ты вводишь нужные данные, и в memo появляется текст кода! Вопрос только в том, что нужен чел, который возьмется конструировать, я потому и пишу, что сам не имею времени, да и желания собсвенно из-за некоторых обстоятельств, ну хотябы кто-то собрал бы всю нужную инф. про самые известные плагины...
Что, если сделать в делфи программку для конструкций mmb скрипта для работы с некоторыми плагинами!
У меня к некоторым плагинам идет скриптмейкер, в нем перечень функций, их описание и генератор скрипта. Естественно формирует только обращения к функциям плагина Можно конечно унифицировать работу с плагинами, смотри тут.
Добавлено (09 Март 2009, 10:36) --------------------------------------------- От оффсайта были потуги написать такой софт. В старых сдк даже предлагалось включать текстовую информацию о функциях, чтобы утилита могла брать описания функций прямо из плагина. Но эта идея заглохла. Да и если бы я документировал каждую функцию, например, UnicodeRTFEdit, то файл раздуло бы а я умом бы тронулся. Тут хелп нормально дописать кайфа нет, а тут какие-то описания в плагин вставлять... ваащщще
Добавлено (09 Март 2009, 10:36) --------------------------------------------- Не нужно это, поверь
Жизнь оказалась не такой уж и забавной, как поначалу...
Мне тут к дипломной на выпуск из компьютерной школы надо программу стряпать, сначала хотел конструктор сайтов сделать, начал, наполовину сделал, потом что-то показалось мне не очень моя прога, потом решил, а может собрать пак собсвенных плагинов, да сделать программу управления ими. toizy, как думаешь?
Делферы поможите мне... Изучаю делфи, ну и попутно делаю для дела службу. Суть такая, мне надо останвить службу после того как она запустит приложение. Гугл дает примеры создания и запуска, но про останову ничего не нарыл, вот код:
Quote
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, Registry, ShellAPI; type TControlSP3D = class(TService) procedure ServiceCreate(Sender: TObject); private { Private declarations } public function GetServiceController: TServiceController; override; { Public declarations } end; var ControlSP3D: TControlSP3D; implementation {$R *.DFM} procedure ServiceController(CtrlCode: DWord); stdcall; begin ControlSP3D.Controller(CtrlCode); end; function TControlSP3D.GetServiceController: TServiceController; begin Result := ServiceController; end; procedure TControlSP3D.ServiceCreate(Sender: TObject); var Reg: TRegistry; Regread: AnsiString; Patchapp:PAnsiChar; begin Reg:=TRegistry.Create; Reg.RootKey:=HKEY_LOCAL_MACHINE; Reg.OpenKey('SYSTEM\CurrentControlSet\Services\ControlSP3D\', False); Regread:=Reg.ReadString('patched');//читаем значение Patchapp:= PAnsiChar(Regread); Reg.Free;//нах рег If Patchapp <> '' then //проверка на пустоту if not FileExists(Patchapp) then Exit; //проверка на файл //запускаем прогу ShellExecute(0, 'open', Patchapp, nil, nil, SW_SHOWNORMAL);//SW_HIDE //выход службы хз.... end; end.
если надо какой файл из проекта то напишите, а то я незнаю что надо...
Добавлено (23 Май 2010, 19:43) --------------------------------------------- походу надо было новую тему сделать, Админы если не трудно перенесите
Сообщение отредактировал Сергей - Воскресенье, 23 Мая 2010, 19:34
Никогда не имел дел со службами, а потому... Вот здесь есть материал по "службам". По-моему этого вполне достаточно. Или попробуем дожидаться Алекса, т.к. он в этих делах рубит. Никто не может вернуться в прошлое и изменить свой старт. Но каждый может стартовать сейчас и изменить свой финиш!
Ну, не знаю... Я не вдавался в подробности, но по-моему там есть всё необходимое:
Quote
OnExecute, OnStart, OnStop, OnPause, OnContinue - остальные события можно разделить на две группы: OnExecute и все остальные Связано это с типом работы. Вы можете реализовать работу службы двумя способами.
Вариант первый: стартует служба, вы начинаете что-то делать, время от времени уведомляя систему о своём состоянии, потом служба останавливается.
Вариант второй: стартует служба, создаёт рабочие потоки. По уведомлению от системы потоки останавливаются и служба выключается.
Обычно в службах используется второй вариант, но это ваш выбор - мы расскажем об обоих.
Итак, событие OnExecute реализует первый вариант: вы просто вписываете весь код службы в OnExecute, не забывая время от времени вызывать ReportStatus для уведомления системы о своём состоянии (если вы будете выполнять работу длительное время) и ServiceThread.ProcessRequests - для получения от системы сообщений. ServiceThread.ProcessRequests можно рассматривать как аналог Application.ProcessMessages для обычных приложений. При приёме сообщений будут генерироваться соответствующие события: OnStop, OnPause или OnContinue. При возникновении событий вы можете каким-то образом уведомлять код в OnExecute (или использовать для этого изменение состояния службы). Как только вы выходите из OnExecute - служба остановилась. Заметим, что если вы сами вышли из OnExecute, то событие OnStop не генерируется. Т.е. это событие возникает, только если его кто-то прислал.
"Наша служба и опасна и трудна"...
Добавлено (23 Май 2010, 20:49) --------------------------------------------- Пардон, не докопипастил...
Quote
Для второго варианта реализации вы не должны назначать обработчик OnExecute, но обязаны реализовать, как минимум, OnStart и OnStop. В первом обработчике вы запускаете рабочие потоки службы, а в OnStop - останавливаете. Дополнительно вы можете реализовать OnPause и OnContinue, если ваша служба должна уметь приостанавливаться. Служба будет остановлена, только когда она перейдёт в состояние csStopped. Обычно это бывает после успешного завершения OnStop.
Итак, обычно для реализации минимальной службы требуется написать обработчики OnStart/OnStop и/или OnExecute.
Добавлено (23 Май 2010, 20:51) --------------------------------------------- Блин, мне ещё не хватает службы начинать изучать.
Никто не может вернуться в прошлое и изменить свой старт. Но каждый может стартовать сейчас и изменить свой финиш!
Сообщение отредактировал Peter - Воскресенье, 23 Мая 2010, 20:46
Выполнение сервиса происходит в OnExecute. Программа же запускается в OnCreate. Все что нужно, это оставить OnExecute пустым. Обычно в OnExecute запускают бесконечный цикл, таким образом, сервис выполняется постоянно. Когда OnExecute отработает, сервис остаётся инсталлированным, но уже не выполняется.
Добавлено (23 Май 2010, 22:17) --------------------------------------------- Вообще, не люблю делфийскую обёртку сервиса. Ограничивает сильно.
Добавлено (23 Май 2010, 22:20) --------------------------------------------- Кстати, по ссылке, данной Peter, всё есть.
Жизнь оказалась не такой уж и забавной, как поначалу...
1 Служба на то и служба что бы все время быть загруженной, иначе она наф ненужна. Останавливать службу есть необходимость или при деинсталяции софта ее пользующего, либо для ее замены на иную версию, иначе просто не удастся переписать файл. Что она вообще у тебя делает, и нужно вообще использовать службу для этих целей? OnExecute основная процедура, служба постоянно что то делает, скажем ожидает, когото чегото, когда кто то что то появилось служба делает то что ей предписано. При завершении процедуры OnExecute сервис останавливается. Судя по приведенному фрагменту она вообще не запускается. Если твой файл присутствует в момент запуска службы она его запускает и останавливается, если файла нет -просто останавливается итого ты написал просто извращенно усложненный бат файл
Ладно, не буду наводить тень на плетень, все что делает сервис делается в пределах процедуры OnExecute то би весь твой код должен быть там. Функция OnExecute выполняется один раз, следовательно что бы она сразу же и не закончилась нужно организовать цикл While not Terminated do begin ServiceThread.ProcessRequests(True); .................. end; когда попадет сюда сервис остановится
Добавлено (23 Май 2010, 22:47) ---------------------------------------------
Quote (toizy)
Вообще, не люблю делфийскую обёртку сервиса. Ограничивает сильно.
Аналогично!
Quote (toizy)
Выполнение сервиса.....
Обычно у людей проблемы не остановить а запустить сервис Сергей,просто еще не врубился что сервис у него не работает, че то про цикл все забывают или посто недопонимают, аналогично и в потоках. Сергей, скажу сразу, от того как ты сделаеш обработку в цикле будет зависить нагрузка проца
Добавлено (23 Май 2010, 22:51) ---------------------------------------------
Quote (toizy)
Обычно в OnExecute запускают бесконечный цикл
Ну не совсем бесконечный, если так то только терминате помогет, а он работает не лучшим образом, и используется только в критических ситуациях.