Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Esperar a terminar algo (https://www.clubdelphi.com/foros/showthread.php?t=12243)

Patxi 09-07-2004 21:41:43

Esperar a terminar algo
 
Hola, será una tonteria pero yo no sé cómo hacerlo,
si tengo un timer que en su OnTimer hace una serie de cosas y pulso un botón y en su OnClick quiero hacer algo pero solo cuando la procedure del OnTimer haya terminado, si le pongo un while "esta_ejecutandose" do Application.ProcessMessages; siendo esta_ejecutandose una variable que pongo a True al principio del OnTimer y a False al final, para que espere a que termine lo del OnTimer, se queda con lo del ProcessMessages todo y las instrucciones de dentro del OnTimer también se quedan esperado.
Si alguien me indicara algo, se lo agradecería mucho.

tolomeo 09-07-2004 22:30:10

Amigo mio, si no te he entendido mal, tienes varias formas de hacer lo que preguntas, pero a groso modo vienen a ser lo mismo, te pongo varios ejemplos:

Si quieres que el Timer se pare cuando Termine :
Código Delphi [-]
 
 TForm1.Timer1Timer(Sender: TObject);
 begin
 <>     TTimer(Sender).Enabled := false;
            
       ... Codigo que quieras poner...
 end;
 
 TForm1.ClickButton1(Sender: TObject);
  begin
      if not Timer1.Enabled then
      begin
          ....  Codigo que quieras poner...
      end;
 end;
Si el Timer siempre esta siempre activo pon una variable boolean
y puedes comprobar en el evento del boton y esa variable esta o
no en True, como si fuese un semaforo, tambien puedes poner el
boton inicialmente en desabilitado, y habilitarlo cuando se termine
el codigo dentro del evento OnTimer de la siguiente manera:
Código Delphi [-]
Button1.Enabled := true;

Facil.;)

Patxi 10-07-2004 11:02:11

Hola, lo que pregunto es algo diferente, si hago lo que me dices:

TForm1.Timer1Timer(Sender: TObject);
begin
<> TTimer(Sender).Enabled := false;
... (CT) Codigo que quieras poner...
end;

TForm1.ClickButton1(Sender: TObject);
begin
if not Timer1.Enabled then
begin
.... (CB) Codigo que quieras poner ...
end;
end;

si el timer está enabled, el código C1 no se ejecutaría, lo que yo pretendo es esperar a que termine el código CT y entonces se ejecute el CB.

Si lo hago de esta otra forma, pues no funciona ya que el CT también se para:

TForm1.Timer1Timer(Sender: TObject);
begin
Ejecutandose:=True;
... (CT) Codigo que quieras poner...
Ejecutandose:=False;
end;

TForm1.ClickButton1(Sender: TObject);
begin
while Ejecutandose do Application.ProcessMessages;
begin
.... (CB) Codigo que quieras poner ...
end;
end;

Bueno muchas gracias.


La franja horaria es GMT +2. Ahora son las 12:21:29.

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