PDA

Ver la Versión Completa : Contador de tiempo de una aplicacion


rufo
18-09-2012, 22:01:43
Buenas tardes amigos, tengo un problemilla y ya revise el foro pero nada, resulta que estoy haciendo un programa en el cual tengo timer pero quiero hacer que cuando se ejecute mi aplicacion empieze un conteo de cuanto tiempo llevar ejecutandose mi programa, pero nose como hacerlo ya que no quiero usar botones si no que se active al iniciar la aplicacion, entonces nose como empezar, espero me ayuden y gracias de antemano.

roman
18-09-2012, 22:11:07
Podrías activar el timer en el evento OnShow del formulario principal.

// Saludos

rufo
18-09-2012, 22:25:33
Ok, gracias amigo Roman, ahora te muestro codigo que tengo en el cual no encuentro como hacer para que empieze el conteo desde 00:00:00
ya que el codigo que tengo empieza pero con un conteo en retroceso.


CODIGO


procedure TCONTROLPHONE.Timer1Timer(Sender: TObject);
begin
Label3.Caption:= FormatdateTime('hh:mm:ss',StrToDateTime(Label3.Caption) -0.00001);

end;

Jal9000
18-09-2012, 22:34:08
Buenas.

Hay varias maneras.

Para empezar, ya que parece que te gusta el timer, puedes ponerlo con Timer1.Interval:= 1000 (ms.) e ir contando las veces que se activa a base de incrementar una variable global dentro del evento OnTimer del Timer. Lo activas en el evento FormShow de la Form principal de tu programa haciendo Timer1.Enabled:= True o bien ya directamente en el propio inspector de objetos. Cuando te interese saber cuanto tiempo ha pasado echas cuentas del tiempo con la variable y ya está.

De todas maneras yo no me liaría tanto. Existe funciones y variables especiales para tiempo:

Puedes declarar una variable, llamémosla tiempo del tipo TDateTime. Al empezar el programa, por ejempo en el evento FormShow de la Form principal de tu programa,
haz tiempo:= Now;

Now es una funcion que te devuelve el instante actual (no voy a entrar ahora en qué formato) y luego, cuando te interese saber cuanto tiempo ha pasado haz
tiempo:= Now - tiempo; esto te dejará la variable tiempo cargada con el tiempo que ha pasado desde el principio.
A continuación añade DateUtils a tu lista de uses y usa el procedimiento
DecodeDateTime(const AValue: TDateTime;
out AYear : Word;
out AMonth : Word;
out ADay : Word;
out AHour : Word;
out AMinute : Word;
out ASecond : Word;
out AMilliSecond : Word);poniendo la variable tiempo como valor para AValue. Obtendrás en las variables de salida el incremento de tiempo descompuesto en años, meses... hasta milisegundos. En realidad cuesta más de explicar que de hacer, pero creo que ya lo habrás pillado. Ten en cuenta que si tienes que mirar el incremento de tiempo varias veces, habrás de guardar la primera lectura de Now en una variable aparte, para que no se pierda.

He leido por algún sitio que hay una variable del estilo de tick que se inicia al arrancar Windows (o quizá la sesión, ahora no sé). Podrías leerla dos veces al estilo de la segunda solución, pero la verdad, no me acaba de gustar.

Saludos y que no decaiga (el ánimo...)

Casimiro Notevi
18-09-2012, 22:45:48
Jal9000, bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

Cuando necesites poner código, recuerda poner los tags al mismo, ejemplo:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

Por cierto, has hecho una buena explicación sobre el tema.

Jal9000
19-09-2012, 01:09:24
Hola, Casimiro:

Tomo nota de las buenas costumbres. De hecho ahora buscaba un "Envolver para regalo" pero no existe...

Saludos

Casimiro Notevi
19-09-2012, 01:16:21
De hecho ahora buscaba un "Envolver para regalo" pero no existe...
No te preocupes, eliges color y te lo ponemos para ti ;)

rufo
19-09-2012, 22:02:09
Listo amigos ya me quedo resuelto el problemilla que tenia, les pongo el codigo para futuras consultas



procedure TCONTROLPHONE.Timer1Timer(Sender: TObject);
begin
segundos := segundos + 1;
Label3.caption := TimeToStr(segundos / (24*60*60));
end;


Y en el evento Onshow le puse este codigo


procedure TCONTROLPHONE.FormShow(Sender: TObject);
begin
LongTimeFormat := 'hh:mm:ss';
Label3.caption := TimeToStr(0);
Timer1.enabled := true;
segundos := 0;
end;


Y en la parte de private


private
{ Private declarations }
segundos : longint;


y con eso me funciono lo que esta buscando, espero que les ayude a futuras consultas y gracias a todos.