Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 22
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
  #2  
Antiguo 21-02-2005
[Nbull] Nbull is offline
Miembro Premium
 
Registrado: nov 2004
Ubicación: Valencia-España
Posts: 168
Poder: 22
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
  #3  
Antiguo 21-02-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 26
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
  #4  
Antiguo 21-02-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 12:50:37.


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