Mostrar form em um serviço do Windows

Delphi

05/02/2007

boa tarde senhores,
o topico eh antigo mas estou tendo problemas com um simples form.show.



ativei o interactive, criei ele no inicio do projeto e nada, ja criei ele em tempo de execucao tb nda..

criei ele pela thread execute nada, criei ele no evento start do service como ariosvaldo falou que funcionou.. tb nada.

o servico levanta, a conexao sql tb levanta, uma query de teste q fiz tb levanta, porem nao ha cristo q faca o form fique visivel!
botei um showmessage, e ele funciona somente no create e qdo ele eh criado no inicio do projeto... alguem tem alguma solucao / ajuda ?!?!

grato!
segue o fonte..


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
DB, ADODB;


type

TServiceThread = class(TThread)
private
protected
procedure Execute; override;
end;

TService1 = class(TService)
con1: TADOConnection;
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
ServiceThread: TServiceThread;
public
function GetServiceController: TServiceController; override;
end;

var
Service1: TService1;

implementation

uses Unit2;

{$R *.DFM}

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

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

{ TServiceThread }

procedure TServiceThread.Execute;
var f : TForm2;
begin
//f := TForm2.Create(Application);
//f := TForm2.Create(nil);

while not (Terminated) do
begin
//f.show;
end;
//FreeAndNil(f);
end;

{ TService1 }

procedure TService1.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
ServiceThread.Resume;
Continued := True;
end;

procedure TService1.ServicePause(Sender: TService; var Paused: Boolean);
begin
ServiceThread.Suspend;
Paused := True;
end;

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
var f : TForm2;
begin
ServiceThread := TServiceThread.Create(False);
Started := True;
//ShowMessage(´teste´);
//f := TForm2.Create(application);
//f := TForm2.Create(nil);
//f.show;
//form2.Show; // criado no inicio do projeto..
end;

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
ServiceThread.Terminate;
Stopped := True;
end;

end.

==

TForm2 = class(TForm)
dbgrd1: TDBGrid;
qry1: TADOQuery;
ds1: TDataSource;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
...



Arthurzanona

Arthurzanona

Curtidas 0
POSTAR