FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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 : 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:
Facil. |
#3
|
|||
|
|||
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|