Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ejecutar 2 timers a la vez (https://www.clubdelphi.com/foros/showthread.php?t=77221)

Hayton 04-01-2012 18:36:01

Ejecutar 2 timers a la vez
 
Hola, chicos he buscado y no he encontrado nada de esto, por eso os lo pregunto a ver si alguno lo sabe hacer.

Lo que quiero es que 2 timers se ejecuten simultaneamente, conforme lo tengo ahora se ejecuta uno y despues el otro.

Código:

procedure TForm1.Label2Click(Sender: TObject);
begin

  timer1.Enabled:=true;
  timer2.Enabled:=true;

end;

Gracias y saludos.

duilioisola 04-01-2012 19:03:48

Todo en informática es secuencial. La diferencia entre el primer timer y el segundo serán milésimas de segundo...

Lo que haces es habilitar los timers. Eso es como poner una alarma y que esa alarma llame a una función cuando llegue el momento.

Si los dos están puestos a 5 segundos, el primero ejecutará su sección OnTimer unas milésimas de segundo antes que el otro, siempre y cuando el primero no colapse la cpu.

¿Cuál es el problema?

Hayton 04-01-2012 21:31:33

Los timers los tengo a 200 milisegundos, y mis acciones son:

Un timer aumenta la propiedad height de 2 en 2 de un componente hasta un tope, y el otro disminuye la misma propiedad de otro componente hasta otro tope. Cuando llegan al tope se desactivan.

De manera que da la sensacion que el que se hace mas grande se despliega y el que se hace mas pequeño se repliega. El problema es que quiero que se haga todo a la vez, uno que se agrande y el otro que encoja. Y lo que ahora sucede es que primero encoge uno y luego agranda el otro.

Casimiro Notevi 04-01-2012 21:39:45

Parece problema del programa, pon el código fuente que lo veamos :)

duilioisola 04-01-2012 22:22:58

Yo pondría un solo timer:
Código Delphi [-]
procedure TForm1.Label2Click(Sender: TObject);
begin
  timer1.Enabled:=true;
end;

procedure TForm1.OnTimer1
begin
   // Deshabilito el timer por si tarda demasiado en ejecutarse
   Timer1.Disable;

   // Hago cada cosa dos veces para evitar errores por si queda Top negativo
   if (Componente1.Top > 0) then
      componente1.Top = Componente1.Top - 1;
   if (Componente1.Top > 0) then
      componente1.Top = Componente1.Top - 1;

   // Hago cada cosa dos veces por si el tope es impar
   if (Componente2.Top < Tope) then
      componente2.Top = Componente2.Top + 1;
   if (Componente2.Top < Tope) then
      componente2.Top = Componente2.Top + 1;

   // Hago que la aplicacion refresque la pantalla
   Application.ProcessMessages;

   // Vuelvo a habilitar el timer si corresponde
   if ((Componente1.Top > 0) or (Componente2.Top < Tope)) then
      Timer1.Enable;
end;

Hayton 05-01-2012 01:14:45

Ok, gracias. Me ha servido.

Saludos.


La franja horaria es GMT +2. Ahora son las 11:21:18.

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