Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   method WndProc not found in .... (https://www.clubdelphi.com/foros/showthread.php?t=29652)

Enan0 27-01-2006 17:38:27

method WndProc not found in ....
 
Hola amigos, Bueno estoy teniendo este problemita con un servicio de windows., se que no es lo mas correcto visualizar formularios con un servicio, pero así me lo han requerido..
Buscando en el foro como hacer para detectar la creación de la barra de tareas. encontre el codigo que debajo uso
"procedure WndProc(var Msg: TMessage); override"

pero al momento de compilar me salta el siguiente error y no se porque. alguna idea??

method WndProc not found in Base class

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  ExtCtrls,Forms,Newscsnycit;

type
  TXCnSrv = class(TService)
    Timer1: TTimer;
    procedure ServiceExecute(Sender: TService);
    procedure Timer1Timer(Sender: TObject);
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  Protected
    procedure WndProc(var Msg: TMessage); override;
end;

var
  XCnSrv: TXCnSrv;
  CMTaskBarCreated:Cardinal;
  fmX:TfmX;
implementation
uses auditoria;
{$R *.DFM}

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

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

procedure TXCnSrv.ServiceExecute(Sender: TService);

begin
  While not terminated do
    ServiceThread.ProcessRequests(True);

end;

procedure TXCnSrv.Timer1Timer(Sender: TObject);
begin
  try
    EscribirAuditoria('ingreso en el Timer');
    fmX:= tfmX.Create(nil);
    EscribirAuditoria('Creo el formulario');
    fmX.Show;
    fmX.Hide;
    EscribirAuditoria('visualizo el form');
  finally
    Timer1.Enabled:=false;
    EscribirAuditoria('Desabilito el timer');
  end;
  EscribirAuditoria('Salio del Timer');
end;

procedure TXCnSrv.ServiceCreate(Sender: TObject);
begin
  EscribirAuditoria('*-*=**-*=**-*=**-*=**-*=**-*=**-*=*');
  EscribirAuditoria('Creando el servicio');
  Timer1.Enabled:=false;
  Timer1.Interval:=60000;//espera a que exchange & SQLsr. esten listos
  Timer1.Enabled:=true;
  EscribirAuditoria('Servicio Creado');
  EscribirAuditoria('*-*=**-*=**-*=**-*=**-*=**-*=**-*=*');
end;

procedure TXCnSrv.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  EscribirAuditoria('Servicio detenido');
  Stopped :=true;
end;
//Detecta la Creación de la barra de tareas
procedure TXCnSrv.WndProc(var Msg: TMessage);
begin
  inherited;
if (Msg.Msg = CMTaskbarCreated) and (not CredTsk)  then
  begin
    //Procedimiento que crea el Icono en SysTray....
    fmX.MostrarForm;
  end;
end;

end.

Neftali [Germán.Estévez] 27-01-2006 18:11:12

Cita:

Empezado por Enan0
...pero al momento de compilar me salta el siguiente error y no se porque. alguna idea??
method WndProc not found in Base class

Lo que pasa es relativamente sencillo; Que ese método lo debiste encontrar en un derivado de TCustomForm, que sí lo posee y por lo tanto se puede redefinir en sus derivados.
El problema es que la clase TService (de la que hereda la tuya) no lo tiene, por eso no puedes redefinirlo utilizando el overeride;
Eso es lo que te está diciendo el mensaje.


La franja horaria es GMT +2. Ahora son las 22:34:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi