Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con un Timer en tiempo de Ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=10309)

santiellupin 15-05-2004 15:41:13

Problema con un Timer en tiempo de Ejecucion
 
Estoy creando una aplicacion y en una de las units, tengo puesto un timer que lo creo en tiempo de ejecucion, pero mi problema no es al crearle, es al asignarle un procedimiento en el evento OnTimer, que me da un error de incompatibilidad del tipo de dato, que el procedimiento no es del tipo tNotifyEvent, sino me equivoco.

Necesito que me digais o que me aconsejeis sobre xq me da el error. Gracias A todos!

__cadetill 15-05-2004 15:50:09

por que no nos pones el código y la definición del procedure que intentas asignarle así como el error exacto que te da?

santiellupin 15-05-2004 15:57:37

error
 
El error que me da es el siguiente:
[Error] uAscensor.pas(73): Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer o untyped parameter'
Gracias!

santiellupin 15-05-2004 16:02:27

perdon!
 
Este es el codigo que se me olvidaba. si necesitas que te ponga toda la unit dimelo que te lo pongo si esto no es suficiente.

constructor cAscensor.Crear(NumPlantas, PlantaActual, PlantaDestino: Integer; Grid: tStringGrid);
begin
inherited Create;
self.NumPlantas := NumPlantas;
self.PlantaActual := PlantaActual;
self.PlantaDestino := PlantaDestino ;
PanelInterno := cPanelInterno.Create ((self as cSujeto), Grid, NumPlantas);
PanelInterno.parent := Grid;
PanelInterno.BoundsRect := Grid.CellRect (0,NumPlantas - PlantaActual);
PanelInterno.SetPisoSelected (NumPlantas - PlantaActual);
self.Grid := Grid;
Timer := tTimer.Create (Grid);
Timer.Enabled := False;
Timer.OnTimer := Llamar(PlantaDestino);
Timer.Interval := 1000;
end;

procedure cAscensor.Llamar(Destino: Integer);
begin
If Destino <> PlantaActual then
begin
RegistrarInicioAscensor;
RegistrarInicioPlanta (Destino);
PlantaDestino := Destino;
end;
end;

__cadetill 15-05-2004 16:21:37

Bueno, sólo era necesario la manera en que construir el timer y la declaración del procedure :) Eso sí, podrías haberlo encerrado entre las etiquetas [ delphi ] y [ /delphi ] (sin espacios)

Referente a tu problema es que, si te fijas la declaración de un evento OnTimer es la siguiente:

Código Delphi [-]
procedure OnTimer(Sender: TObject);

Es decir, el parámetro que espera un objeto, no un integer como tu tienes. La variable que necesitas pasarle, podría ser una propiedad privada del objeto y así, desde dónde necesites (evento OnTimer) usarla

Y la forma de asignar el evento sería algo así:

Código Delphi [-]
constructor cAscensor.Crear(NumPlantas, PlantaActual, PlantaDestino: Integer; Grid: tStringGrid);
begin
  inherited Create;

  self.NumPlantas := NumPlantas;
  self.PlantaActual := PlantaActual;
  self.PlantaDestino := PlantaDestino ;
  PanelInterno := cPanelInterno.Create ((self as cSujeto), Grid, NumPlantas);
  PanelInterno.parent := Grid;
  PanelInterno.BoundsRect := Grid.CellRect (0,NumPlantas - PlantaActual);
  PanelInterno.SetPisoSelected (NumPlantas - PlantaActual);
  self.Grid := Grid;
  Timer := tTimer.Create (Grid);
  Timer.Enabled := False;
  Timer.OnTimer := Llamar;
  Timer.Interval := 1000;
end;

y la definición de Llamar...

Código Delphi [-]
procedure Llamar(Sender: TObject);

Espero te sirva


La franja horaria es GMT +2. Ahora son las 19:32:54.

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