Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-02-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Question Que se me active el segundo timer

Hola a tod@s de nuevo, despues de estar un tiempo desconectado vuelvo al club con mis dudillas,siento ser tan pesado.

Bueno,lo que me pasa ahora es que he colocado dos timer, vi en otro Hilo que explicabais como hacer que se ejecute mi aplicación a una hora, con ese ejemplo me funciona mi aplicación de lujo pero, a mi se me plantea el problema de que quiero que el ususario pueda cerrar la aplicación a los dos minutos por ejemplo.
Para eso me he colocado otro timer y le he llamado TimerEstablecido, pero no llega ha hacerlo.
Para llamar a ese timer lo que he echo es activarlo desde el timer que me inicia la aplicación a la hora que le diga, os paso el codigo y haber si veis vosotros algo mal:
Código Delphi [-]
 
procedure TForm1.TimerConexion1Timer(Sender: TObject);
var
Str: String;
ahora, mediaNoche : Tdatetime;
faltanMilisegundos : int64;
tiempoes,min : Word;
begin
 
{Miro si ha habido cambios en el Archivo ini}
ArchivoIni:= Tinifile.Create(Sinidir+'\config.Ini');
Hora :=StrToint(ArchivoIni.ReadString('Hora','H','00'));
Minutos := StrToint(ArchivoIni.ReadString('Minutos','Min','00'));
NTelefono := ArchivoIni.ReadString('NumTelefono','TLF','');
Testablecido := ArchivoIni.ReadString('TiempoConexion','Conexion','120');
ArchivoIni.Free;
 
{Calculo el tiempo que falta para cerrar}
ahora := now;
medianoche := ahora;
tiempoes := Strtoint(Testablecido);//Me lo pasan al Ini en segundos 
//desde la configuración
tiempoes := Tiempoes div 60;//Lo paso a minutos
min :=tiempoes + minutos;//Se lo sumo a los minutos de la 
//Hora que inicia mi aplicación
medianoche := RecodeTime(medianoche,Hora,min,00,999); // a la fecha actual, 
//le cambio la hora
faltanMilisegundos:= MillisecondsBetween(mediaNoche, ahora);
TimerEstablecido.Interval := faltanMilisegundos;
TimerEstablecido.enabled:= true;//Lo activo

Me pasan dos cosas o no me entra al codigo y no la cierra la aplicación o entra a la misma hora que se ejecuta mi aplicación, no se que puede ser

Un Saludo a todos y Gracias por vuestro tiempo.

Última edición por Nbull fecha: 08-02-2005 a las 10:35:28.
Responder Con Cita
  #2  
Antiguo 08-02-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
No capto la cuestion.

Tienes 2 timer, TimerEstablecido es el de la media noche, y Conexión ???.

Una cosa si está clara. En el evento Timer solo entra cuando se finalice el intervalo especificado, por tanto, en ConexionTimer no entrará hasta que finalice el intervalo que lleva, en ese código no aparece el intervalo de Conexion1, así que no puedo dar más detalles.

En principio, yo activaría los timer desde el OnCreate de la ventana principal, y así los dos timer van independientes. Ahora mismo, TimerEstablecido depende de Conexion1.


OFFTOPIC:
Dale una visual a:
Archivoini.ReadInteger,
Archivoini.ReadTime,
Archivoini.ReadDatetime...

Y en la unidad DateUtils:
Minuteof(datetime)
secondof(datetime)

Saludito
Responder Con Cita
  #3  
Antiguo 08-02-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Hola Lepe gracias por responder, he echo lo que tu me has dicho y lo he puesto en el oncreate, te comento, quiero hacer una aplicación que se ejecute todos los dias a las 8 de la tarde pero, que lo que hace es copiar un fichero etc...,quiero que si el usuario le dice que lo haga durante dos minutos que se pare a los dos minutos y hasta el dia siguiente no lo vuelva hacer.


El problema es que una vez que se ejecuta el timer que me lanza la aplicación no para de ejecutarse.Y yo solo quiero que se ejecute una vez al dia.

¿Como lo puedo resolver?

Gracias Lepe Un Saludo.
Responder Con Cita
  #4  
Antiguo 08-02-2005
Coco Coco is offline
Miembro
 
Registrado: jul 2004
Ubicación: Argentina
Posts: 83
Poder: 20
Coco Va por buen camino
Debes desactivar el timer en el evento ontimer del mismo, con la propiedad

procedure tform1.timer1OnTimer(...);
begin
timer1.enabled:= false;
//tus lineas de codigo
end;
De esta forma el timer1 se ejecutara solo una vez o hasta que desde otro lugar del codigo actives nuevamente el timer1.

Salu2
Responder Con Cita
  #5  
Antiguo 11-02-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Hola Coco perdona que no te haya contestado antes, pero, como siempre hando pillao de tiempo. Gracias por tu aclaración ya he conseguido lo que que queria.


Un saludo.
Responder Con Cita
  #6  
Antiguo 21-02-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 20
Nbull Va por buen camino
Sigo sin hacerle funcionar

Perdonar que reabra el Hilo,pero, es que tengo un pequeño problema con los timer.

He colocado dos timer en mi aplicación uno para que me haga una serie de cosas a la hora que le indique el usuario todos los dias, es decir, todos los dias a las 5 de la tarde que haga x cosas y otro para que a los dos minutos me cierre esos procesos. Para eso tengo el siguiente codigo :

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
ahora, mediaNoche,empieza, cortar: Tdatetime;
faltanMilisegundos,faltanMiliseg : int64;
tiempoes,min : Word;
begin
//Leo de Config.ini la Hora y los Minutos
 
//Hora que comienza la llamada al modem
 ahora := now;
 medianoche := ahora;
 medianoche := RecodeTime(medianoche,Hora,Minutos,00,999); // a la fecha actual, 
//le cambio la hora
faltanMilisegundos := MillisecondsBetween(ahora, medianoche);
timer1.Interval := faltanMilisegundos;
timer1.enabled := true;
{Calculo el tiempo que falta para cortar los procesos}
  empieza := now;
  cortar := empieza;
  Tiempoes := Testablecido;
  min :=tiempoes + minutos;
  If(min>=60)then
  begin
    min:=min-60;
  end;
  cortar := RecodeTime(cortar,Hora,min,00,000); // a la fecha actual,
// le cambio la hora
  faltanMiliseg:= MillisecondsBetween(empieza, cortar);
  TimerEstablecido.Interval := faltanMiliseg;
end;

Y en el pimer timer tengo lo siguiente:

Código Delphi [-]
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
Str:string;
begin
//Desactivo el timer que se ejecuta a la hora que le digo
  Timer1.Enabled:=false;
//Activo el timer que me acaba los procesos a los dos minutos
  TimerEstablecido.Enabled:=true;
//Aquí mis procesos...

En el segundo timer:

Código Delphi [-]
 
procedure TForm1.TimerEstablecidoTimer(Sender: TObject);
var
ahora1, mediaNoche1,empieza1, cortar1: Tdatetime;
faltanMilisegundos1,faltanMiliseg1 : int64;
tiempoes1,min1 : Word;
begin
  TimerEstablecido.Enabled:=false;
//Leo los datos del archivo Config.Ini
getdir(0,SiniDir);
ArchivoIni:= Tinifile.Create(Sinidir+'\config.Ini');
Hora :=ArchivoIni.ReadInteger('Hora','H',0);
Minutos := ArchivoIni.ReadInteger('Minutos','Min',0);
Testablecido := ArchivoIni.ReadInteger('TiempoConexion','Conexion',1);
ArchivoIni.Free;
//Hora que comienza los procesos
 ahora1 := now;
 medianoche1 := ahora1;
 medianoche1 := RecodeTime(medianoche1,Hora,Minutos,00,999); // a la fecha actual, 
//le cambio la hora
faltanMilisegundos1:= MillisecondsBetween(ahora1, medianoche1);
timerConexion1.Interval := faltanMilisegundos1;
timerConexion1.enabled:= true;
{Calculo el tiempo que falta para cortar la llamada}
  empieza1 := now;
  cortar1 := empieza1;
  Tiempoes1 := Testablecido;
  min1 :=tiempoes1 + minutos;
  If(min1>=60)then
  begin
    min1:=min1-60;
  end;
  cortar1 := RecodeTime(cortar1,Hora,min1,00,000); // a la fecha actual, 
//le cambio la hora
  faltanMiliseg1:= MillisecondsBetween(empieza1, cortar1);
  TimerEstablecido.Interval := faltanMiliseg1;
 end;

En el segundo le digo que mañana a las 5 de la tarde o a la hora que sea se ejecuten otra vez los procesos,pero, la put... es que se me ejecutan a los 3 o cuatro minutos otra vez, no lo entiendo por que al iniciar mi aplicación todo funciona bien y hasta que no llega la hora que hay en el archivo config.ini no se ejecuta y es el mismo codigo.

Ha ver si veis algo que este mal y como lo puedo solucionar.Yo lo que quiero es que todos los dias a la misma hora me haga lo mismo.

PD:El Pc estara encendido y mi programa ejecutandose.No quiero usar el administrador de tareas de Windows.

Gracias por vuestro tiempo. Un saludo.
Responder Con Cita
  #7  
Antiguo 21-02-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Podrías hacer que tu timer principal se active cada segundo, por ejemplo, y que en ese momento verifique la hora del sistema, si esta es igual a la hora de inicio, entonces ejecutas el proceso, de otra forma, no haces nada...

Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if Time = TiempoInicio then
    DoProcess
end;
Time es una función de Delphi que devuelve la hora actual del sistema.


Saludos...
Responder Con Cita
  #8  
Antiguo 21-02-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Nbull
Perdonar que reabra el Hilo,pero, es que tengo un pequeño problema con los timer.

He colocado dos timer en mi aplicación uno para que me haga una serie de cosas a la hora que le indique el usuario todos los dias, es decir, todos los dias a las 5 de la tarde que haga x cosas y otro para que a los dos minutos me cierre esos procesos. Para eso tengo el siguiente codigo :

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
ahora, mediaNoche,empieza, cortar: Tdatetime;
faltanMilisegundos,faltanMiliseg : int64;
tiempoes,min : Word;
begin
//Leo de Config.ini la Hora y los Minutos
 
//Hora que comienza la llamada al modem
 ahora := now;
 medianoche := ahora;
 medianoche := RecodeTime(medianoche,Hora,Minutos,00,999); // a la fecha actual, 
//le cambio la hora
faltanMilisegundos := MillisecondsBetween(ahora, medianoche);
timer1.Interval := faltanMilisegundos;
timer1.enabled := true;
{Calculo el tiempo que falta para cortar los procesos}
  empieza := now;
  cortar := empieza;
  Tiempoes := Testablecido;
  min :=tiempoes + minutos;
  If(min>=60)then
  begin
    min:=min-60;
  end;
  cortar := RecodeTime(cortar,Hora,min,00,000); // a la fecha actual,
// le cambio la hora
  faltanMiliseg:= MillisecondsBetween(empieza, cortar);
  TimerEstablecido.Interval := faltanMiliseg;
end;

Y en el pimer timer tengo lo siguiente:

Código Delphi [-]
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
Str:string;
begin
//Desactivo el timer que se ejecuta a la hora que le digo
  Timer1.Enabled:=false;
//Activo el timer que me acaba los procesos a los dos minutos
  TimerEstablecido.Enabled:=true;
//Aquí mis procesos...

En el segundo timer:

Código Delphi [-]
 
procedure TForm1.TimerEstablecidoTimer(Sender: TObject);
var
ahora1, mediaNoche1,empieza1, cortar1: Tdatetime;
faltanMilisegundos1,faltanMiliseg1 : int64;
tiempoes1,min1 : Word;
begin
  TimerEstablecido.Enabled:=false;
//Leo los datos del archivo Config.Ini
getdir(0,SiniDir);
ArchivoIni:= Tinifile.Create(Sinidir+'\config.Ini');
Hora :=ArchivoIni.ReadInteger('Hora','H',0);
Minutos := ArchivoIni.ReadInteger('Minutos','Min',0);
Testablecido := ArchivoIni.ReadInteger('TiempoConexion','Conexion',1);
ArchivoIni.Free;
//Hora que comienza los procesos
 ahora1 := now;
 medianoche1 := ahora1;
 medianoche1 := RecodeTime(medianoche1,Hora,Minutos,00,999); // a la fecha actual, 
//le cambio la hora

faltanMilisegundos1:= MillisecondsBetween(ahora1, medianoche1);
timerConexion1.Interval := faltanMilisegundos1;
timerConexion1.enabled:= true;
{Calculo el tiempo que falta para cortar la llamada}
  empieza1 := now;
  cortar1 := empieza1;
  Tiempoes1 := Testablecido;
  min1 :=tiempoes1 + minutos;
  If(min1>=60)then
  begin
    min1:=min1-60;
  end;
  cortar1 := RecodeTime(cortar1,Hora,min1,00,000); // a la fecha actual, 
//le cambio la hora
  faltanMiliseg1:= MillisecondsBetween(empieza1, cortar1);
  TimerEstablecido.Interval := faltanMiliseg1;
 end;

En el segundo le digo que mañana a las 5 de la tarde o a la hora que sea se ejecuten otra vez los procesos,pero, la put... es que se me ejecutan a los 3 o cuatro minutos otra vez, no lo entiendo por que al iniciar mi aplicación todo funciona bien y hasta que no llega la hora que hay en el archivo config.ini no se ejecuta y es el mismo codigo.

Ha ver si veis algo que este mal y como lo puedo solucionar.Yo lo que quiero es que todos los dias a la misma hora me haga lo mismo.

PD:El Pc estara encendido y mi programa ejecutandose.No quiero usar el administrador de tareas de Windows.

Gracias por vuestro tiempo. Un saludo.
En el Oncreate sabes que TEstablecido es cero verdad??? aun no se ha leido desde el .ini ese valor

A medianoche1 no le cambias la fecha, solo la hora, minutos y segundos, por tanto, faltanmilisegundos no va a tener el valor que esperas!!!.

medianoche1 := ahora1 + 1 ; // 1 dia más
y ahora haz el recodeTime.

Por otra parte ten cuidaddo como pasas los parametros a MillisecondsBetween , si le das el orden contrario, tendrás milisegundos negativos, y estarás poniendo al timer un valor negativo en interval.

faltanMilisegundos1:= MillisecondsBetween(ahora1, medianoche1); dependiendo de la hora actual, puede ser positivo o negativo.

saludos

Última edición por Lepe fecha: 21-02-2005 a las 17:19:25.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:27:25.


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
Copyright 1996-2007 Club Delphi