Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2009, 21:31   #1
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
Вопрос Помогите со службой.

Почему - то служба не хочет реагировать на WM_ события.

Значит делаю так:

Это служба:
Код:
unit Unit1;

interface

uses
  Messages, SvcMgr, Windows, SysUtils, Classes, ExtCtrls;

type
  TMain = class(TService)
    Timer1: TTimer;
    procedure ServiceExecute(Sender: TService);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  protected
    procedure S(var Mes:TMessage); message WM_DEVICECHANGE;
  end;

var
  Main: TMain;

implementation

uses Unit2;

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Main.Controller(CtrlCode);
end;

function TMain.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TMain.ServiceExecute(Sender: TService);
begin
  while not Terminated do ServiceThread.ProcessRequests(True);
end;

procedure TMain.S(var Mes:TMessage);
begin
  Form2.Label1.Caption:=IntToStr(Mes.WParam);
  Form2.Label2.Caption:=IntToStr(Mes.LParam);
  Form2.Show;
end;

procedure TMain.Timer1Timer(Sender: TObject);
begin
  Form2.Show;
end;

end.
Это форма:
Код:
unit Unit2;

interface

uses
  Forms, Classes, Controls, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Hide;  // если тут Close; форма почему-то зависает... :confused: 
end;

end.
Так вот! по таймеру, который в службе окно формы form2 появляется исправно, а вот по событию WM_DEVICECHANGE, да и по другим событиям тоже - не появляется... а меня нужно чтобы появлялось!! Что я делаю не так?
Никки вне форума Ответить с цитированием
Старый 25.01.2009, 21:47   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Попробуйте процедуру
Код:
 protected
    procedure S(var Mes:TMessage); message WM_DEVICECHANGE;
  end;
объявить в разделе private т.е. так:
Код:
private
{ Private declarations }
procedure S(var Mes:TMessage); message WM_DEVICECHANGE;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 25.01.2009, 21:53   #3
goblinyara
Форумчанин
 
Аватар для goblinyara
 
Регистрация: 02.01.2009
Сообщений: 340
По умолчанию

хммм... зря в сервис визуальные компоненты поместили... если хотите как-то управлять службой,то лучше через IPC(хотя сам не пробовал) или через сокеты, также можно по форуму поискать, я уже задавал вопрос по управлению службой - там VictorXP дал неплохой компонентик...
DelphiWorld 6. Скачай, поставь, и будет тебе счастье=)
Программирование, как и любовь -- одно слово, за которым скрывается бесконечное множество занятий.
goblinyara вне форума Ответить с цитированием
Старый 25.01.2009, 22:50   #4
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию

В общем почти разобрался с этой службой...

Т.к. у неё нет окна, то она не получает WM_ сообщения, поэтому я сделал hook ловушку и всё заработало!
Никки вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с службой Pitbull Работа с сетью в Delphi 6 22.06.2008 19:08
Проблема со службой... =LeonZone= Win Api 10 03.11.2007 14:21