Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Mostrar la cuenta atrás de un Timer

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Mostrar la cuenta atrás de un Timer Responder citando

Buenas tardes.

Quiero que cuando una función determinada finalice, cada x minutos se refresque y vuelva a empezar, para ello uso el componente TTimer.

Ahora me viene la duda, si quiero que, en un TLabel por ejemplo, me muestre la cuenta atrás de lo que queda para el "autorefresco" cómo lo podría hacer?

Es decir que me muestre en algún lugar del Form algo como:

Autorefresco en: 10:00

que pase a ser:
Autorefresco en: 09:59

que pase a ser:
Autorefresco en: 09:58
...

y así sucesivamente hasta el 00:00.

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Se me ocurre algo así. Tomo, como dices, 10 minutos.
Código:
TDateTime tHora = EncodeTime(0, 10, 0, 0);
TDateTime tMenos = EncodeTime(0, 0, 1, 0);
Timer1->Interval = 1000;     // Cada segundo

y en el evento OnTimer:
Código:
void __fastcall TfLanzador::Timer1Timer(TObject *Sender)
{
     Timer1->Enabled = false;
     tHora -= tMenos;
     Label1->Caption = "Quedan " + tHora.FormatString("mm:ss");
     if (tHora > 0)
     {
          Timer1->Enabled = true;
          return;
     }
     [Lo que haya que hacer cuando acabe el tiempo]
}
//---------------------------------------------------------------------------

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola.

He probado el código y resulta que tal cual está empieza a contar desde 12:59 (13:00) y decrementando cada vez que pasa por el Timer.

He estado viendo qué estaba ocurriendo pero no veo donde falla. Aunque modifique las variables de entrada:

TDateTime tHora = EncodeTime(0, 10, 0, 0);

a por ejemplo

TDateTime tHora = EncodeTime(0, 5, 0, 0);

sigue empezándo a ejecutarse desde 12:59, 12:58 ...

Lo tengo así en el código:

Código:
TDateTime tHora = EncodeTime(0, 10, 0, 0);
TDateTime tMenos = EncodeTime(0, 0, 1, 0);
Timer1->Interval = 1000;     // Cada segundo


En el evento OnTimer:

Código:
void __fastcall TMainForm::TimerFinCapTimer(TObject *Sender)
{
 this->TimerFinCap->Enabled = false;
 tHora = tHora - tMenos;
 
 this->Label2->Caption = "Quedan " + tHora.FormatString("mm:ss");

     //[Lo que haya que hacer cuando acabe el tiempo]
}


y un botón:

Código:
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
 this->TimerFinCap->Enabled = true;
}


para hacer las pruebas.

Gracias y saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

zankiu escribió:
Hola.

He probado el código y resulta que tal cual está empieza a contar desde 12:59 (13:00) y decrementando cada vez que pasa por el Timer.

He estado viendo qué estaba ocurriendo pero no veo donde falla. Aunque modifique las variables de entrada:

TDateTime tHora = EncodeTime(0, 10, 0, 0);

A ver. Según la ayuda de EncodeTime la estructura es:
Código:
EncodeTime(Word Hour, Word Min, Word Sec, Word MSec)

Como una imagen vale más que 1000 palabras...

Exactamente con el código adjunto. Lo único erróneo que he visto en el código es el formateo de la hora, que debía ser nn:ss en vez de mm:ss
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola de nuevo.

Si, es nn:ss en vez de mm:ss.

Gracias, ahora si que cuenta bien!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.