Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-06-2017
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
[TTimer] Ver tiempo actual para completar el ciclo de un Timer

Hola la idea es la siguiente,

Si programo una tarea que se ejecuta cada 30.000 milesegundos en el evento OnTimer de un TTimer, ¿como puedo mostrar por pantalla cuantos milesegundos o segundos lleva hasta el momento para completar esos 30 segundos.

O explicado en otras palabras. Si se ejecuta cada 30 segundos una tarea o proceso, ¿como puedo ver en un TLabel lo siguiente?

...
22
23
24
25
26
27
...
Responder Con Cita
  #2  
Antiguo 24-06-2017
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola Maxium,

30.000 milisegundos son 30 segundos, estaremos de acuerdo. Pues bien, puedes usar una variable donde almacenar los segundos que se llevan "contados". Si quiere mostrarlos tal que: 1, 2, 3, 4, etc., en cada evento "Interval" del Timer tendrás que incrementar el valor de dicha variable. Si quieres mostrar los segundos tal que: 29, 28, 27, etc., deberás hacer lo contrario, esto es, decrementar el valor de la variable. En en primer caso la variable parte de 0 y en el segundo caso parte de 30. Dicha variable podrás mostrarla en un "Label" o en el control que prefieras.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 25-06-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

A mi me queda la duda de si el conteo debe mostrar los segundos transcurridos o faltantes para cada temporización del timer, es decir para cada vez que se dispare el evento OnTimer. Si eso es lo que deseas, vas a necesitar un segundo temporizador para que realize la tarea del conteo entre eventos (del modo que te comentó dec) ya que el TTimer no contempla esa posibilidad.

Un ejemplo:
Código Delphi [-]
...
var
  Lapso: Integer = 0; // contador 

// OnTimer 30 segundos
procedure TForm1.Timer30Timer(Sender: TObject);
begin
  try
    ShowMessage( '30 segundos' ); // Acción que se desata cada 30 segs.
  finally
    Lapso := 0;
  end;
end;

// OnTimer 1 segundo
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc( Lapso );
  Label1.Caption := Format( '%d s.', [Lapso] );
end;

procedure TForm1.ButtonStartClick(Sender: TObject);
begin
  Timer30.Interval := 30000; // 30 s
  Timer30.Enabled  := True;
  Timer1.Interval := 1000;  // 1 s
  Timer1.Enabled  := True;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 25-06-2017
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Yo, lo que diga ecfisa.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 25-06-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por dec Ver Mensaje
Hola a todos,

Yo, lo que diga ecfisa.
¡ No hombre ! que bién pude equivocar la interpretación y él querer otra cosa, ya nos especificará MAXIUM que es lo que anda necesitando.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 25-06-2017
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
¡Hola a todos!

Cita:
Empezado por ecfisa Ver Mensaje
¡ No hombre ! que bién pude equivocar la interpretación y él querer otra cosa, ya nos especificará MAXIUM que es lo que anda necesitando.

Saludos
Nada, nada... excusas. Yo lo que digas tú hasta el final. ¡Lo digo muy en serio!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 27-06-2017
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Hola que tal,

Me refería a los segundos transcurridos.

Sin embargo, es útil saber el proceso inverso para ver los segundos o tiempo faltante, y usarlo en algún proyecto futuro. Sino es por mi, será por alguien más.

Por lo tanto, agradezco vuestra colaboración
Responder Con Cita
  #8  
Antiguo 27-06-2017
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Lo más "fácil" sería usar dos TTimer: uno para los 30 segundos y otro para cada segundo, tal como comenta ecfisa, pero yo usaría sólo un TTimer que se activara cada segundo y fuera actualizando una variable (o el propio "Tag" del componente) y el TLabel hasta llegar a treinta, más o menos así:
Código Delphi [-]
INTERFACE

  TYPE
  (* El formulario. *)
    TMiForm = CLASS (TForm)
      ElTimer: TTimer;
      ElLabel: TLabel;

      PROCEDURE onTimerTick (Sender: TObject);
    { ... }
    PRIVATE
      fContador: INTEGER = 0;
    { ... }
    END;

IMPLEMENTATION

{ ... }

  PROCEDURE TMiForm.onTimerTick (Sender: TObject);
  BEGIN
    INC (fContador);
    IF fContador >= 30 THEN
    BEGIN
    { Aquí se hace la operación que se requiera, o se activa un evento, o lo que sea
       y se reinicia el contador. }
      fContador := 0
    END;
    ElLabel.Caption := IntToStr (fContador)
  END;

{ ... }
Las ventajas son que usas menos recursos (y aún menos si en vez del campo fContador usas la propiedad Tag del TTimer), pero principamente evitaras tener que sincronizar dos TTimer diferentes, que puede parecer que no pero puede dar problemas.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 27-06-2017 a las 10:53:59.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Quitar un segundo de tiempo a un Timer emeritos Varios 1 16-12-2013 13:06:36
Problemas con la creación de TTimer es tiempo de ejecución vejerf OOP 3 14-04-2008 16:26:14
Controlar el tiempo actual Alexis7788 Varios 3 28-09-2006 20:14:21
crear label por codigo en un ciclo for.. las beses de el ciclo sakuragi .NET 3 29-09-2005 05:04:29
Problema con un Timer en tiempo de Ejecucion santiellupin OOP 4 15-05-2004 16:21:37


La franja horaria es GMT +2. Ahora son las 14:54:21.


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