Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Manejo de un Ttimer (https://www.clubdelphi.com/foros/showthread.php?t=11631)

miguel_fr 19-06-2004 23:02:59

Manejo de un Ttimer
 
Buenas, soy yo nuevamente con una consulta simple pero que me esta matando.
tengo un Ttimer en mi form y no se bien como utilizarlo, yo necesito generar un contador que comienze en 0 y se vaya incrementando, el contador es de tiempo, o sea que tiene hora, minutos y segundos.
lo unico que logro hasta el momento es inicializar mi contador a cero
Código Delphi [-]
var
  DateTime : TDateTime;
datetime:=0;{no importa si pongo 1000 siempre esta en cero}
edit.text:= timetostr(datetime);
{cuando yo quiero incrementar esto utilizo la funcion}
IncSecond(datetime,60);
{pero no me funciona}
el incremento lo debo hacer en el evento ontimer, si no me equivoco. me surge otra duda, si necesito mas de un contador de este tipo, voy a necesitar tantos Ttimer como contadores quiera incorporar?

hogol 20-06-2004 00:33:59

Hola buenas

Yo lo haría del siguiente modo:

1) Define una variable global como tdatetime. Por ejemplo
Código Delphi [-]
 var hora_inicio : Tdatetime;

2) En el evento oncreate del formulario añades esto:
Código Delphi [-]
hora_inicio := now;

3) Finalmente en el evento ontimer pon solo esta linea :
Código Delphi [-]
 edit1.text := timetostr(now-hora_inicio);

El problema de tu código es que defines la variable en el evento del timer, con lo cual el valor actual se pierde cada vez que sale del evento. Además, cada vez que se ejecuta el timer tu mismo pones el contador a cero, cuando solo deberias hacerlo una vez al comenzar el programa.
Finalmente, lo de sumar 'manualmente' el valor del contador tampoco es muy buena idea porque la precisión del timer no es muy buena y a la larga tu reloj terminaria adelantandose o atrasandose.

Saludos
Hogol

miguel_fr 20-06-2004 01:29:04

muchas gracias por tu ayuda, ya me pongo a investigar esto y luego te aviso. no tenia idea de "now"
siguiendo en el tema, el timer como ve una resta de este tipo
datetime = 23:00
now = 01:00

tengo que realizar algun tratamiento en estos casos o delphi realiza la convercion adecuada para no tener problemas?

Lepe 21-06-2004 20:25:26

El tipo de dato TDateTime es formato de fecha y hora, representado mediante un número real, donde la parte entera es el número de dias y la parte fraccionaria es la hora, minutos, segundos y milisegundos.

Por tanto puedes hacer perfectamente sumas y restas con otras fechas y mezclandolos con números, que siempre vas a tener una fecha válida.

Código Delphi [-]
  hora_inicio := hora_inicio  + 1 // sumamos 1 dia
  hora_inicio := hora_inico + 1/24 // sumamos 1 hora a la fecha.

Mas natural sería usar las funciones que existen en delphi (al menos en la version 6) para incrementar parcialmente, pero bueno, es la idea lo que importa.

Por tanto, cuando sean las 23:00 y le sumas 2 horas, cambiará la hora y la fecha, dandote la 1 de la madrugada y modificando la fecha del datetime.

Si lo que necesitas es saber el tiempo que ha pasado entre 2 fechas, usa las funciones DaysBetween, HoursBetween etc... etc...

Saludos


La franja horaria es GMT +2. Ahora son las 20:36:13.

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