Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-06-2006
jorgito.crazy jorgito.crazy is offline
Miembro
 
Registrado: may 2006
Posts: 54
Poder: 19
jorgito.crazy Va por buen camino
Smile Como Pausar un Ciclo "WHILE"

Hola a todos, no se si esta se el foro correcto, pero creo que tiene algo que ver. ¿Es posible pausar un ciclo en un procedimiento determinado desde otro procedimiento?, por ejemplo:

BUTTON1(on click):
begin
while a<100000 do
inc (a)
end;

Ahora, cuando haga click en BUTTON2, entonces el ciclo se ponga en "BREAK", y cuando clikee de nuevo, en "CONTINUE". Además de que no se como se hace esto, cuando un ciclo está en proceso y se clikea un Tbotton, no ocurre nada, es como si la aplicación no respondiera, cuando en verdad si lo está haciendo.

Gracias por adelantado, un saludo a todos
Responder Con Cita
  #2  
Antiguo 29-06-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jorgito.crazy
cuando haga click en BUTTON2, entonces el ciclo se ponga en "BREAK", y cuando clikee de nuevo, en "CONTINUE"
Utiliza una variable booleana para "simular" (ya que no puedes pararlo) que te han parado el bucle, de forma que no haga nada.


Cita:
Empezado por jorgito.crazy
Además de que no se como se hace esto, cuando un ciclo está en proceso y se clikea un Tbotton, no ocurre nada, es como si la aplicación no respondiera, cuando en verdad si lo está haciendo.
Para que responda a los eventos debes colocar dentro del bucle la siguiente instrucción:
Código Delphi [-]
  Application.ProcessMessages;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 29-06-2006
jorgito.crazy jorgito.crazy is offline
Miembro
 
Registrado: may 2006
Posts: 54
Poder: 19
jorgito.crazy Va por buen camino
Smile

Gracias neftalí, esto de application.ProcessMessages, no atrazará un poco el ciclo?, según parece, lo que hace ese procedimiento es; dentro del mismo ciclo, revisar el estado de los controles no?. Tengo otro problemita: la aplicación, no cierra hata que no termina el ciclo, que puedo hacer?,
Gracias otra vez neftalí.
Responder Con Cita
  #4  
Antiguo 29-06-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Hola, debes usar dos variable globales, una que te indicará cuando debes parar el ciclo y otra que te guardará el valor del contador en el momento que se ha hecho la pausa.

Dentro del siclo debes poner Application.ProcessMessages para que la aplicación te responda a los eventos y ... Bueno mejor te escribo un ejemplo:
Código Delphi [-]
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    Para : Boolean;
    Valor : Integer;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  Valor := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
  var i : integer;
begin
   I := Valor;
   Para := False;
   Screen.Cursor := crHourGlass;
   try
     while I < 90000000 do
     begin
       I := I +1;
       if Para then
       begin
         Valor := I;
         Break;
       end;
       Application.ProcessMessages;
     end;
   finally
     Screen.Cursor := crDefault;
   end;
end;
 

procedure TForm1.Button2Click(Sender: TObject);
begin
  Para := True;
end;
end.

es todo, espero haberte ayudado

Saludos Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #5  
Antiguo 29-06-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jorgito.crazy
lo que hace ese procedimiento es; dentro del mismo ciclo, revisar el estado de los controles no?
No. Esto lo que hace es revisar los mensajes que haya pendientes en la cola de mensajes de windows y los procesa; Si no lo colocas no se revisan y por eso el programa no hace caso ni al teclado ni al ratón hasta que no acaba el bucle.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 29-06-2006
jorgito.crazy jorgito.crazy is offline
Miembro
 
Registrado: may 2006
Posts: 54
Poder: 19
jorgito.crazy Va por buen camino
Smile

OK, Muchas gracias Neftalí y Yusnerqui, solo me queda una preguntica: Que es Try....Finally?
Responder Con Cita
  #7  
Antiguo 29-06-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Cita:
Empezado por jorgito.crazy
Que es Try....Finally
Pues aquí podrás encontrar información al respecto.

Saludos.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #8  
Antiguo 29-06-2006
jorgito.crazy jorgito.crazy is offline
Miembro
 
Registrado: may 2006
Posts: 54
Poder: 19
jorgito.crazy Va por buen camino
Bueno, eso esta un poco complicado, pero bueno lo importate que quiero decirte es, que en el codigo que me diste, Quitando Try y Finally, entonces el codigo funciona igual, en la página que me dices, dice Try y Exeption, y habla de las exepciones, lo que quiero saber es...mira por ejemplo:

While ...Do
begin
Realiza la acción hasta que se cumpla la condicón.
end;

Ya entiendes?, de todas formas, muchas gracias por la página de exepciones, no sabía nada de lo que se narra en ese lugar. Bueno.

Un saludo Brother
Responder Con Cita
  #9  
Antiguo 30-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
El try .. finally es un "seguro de vida".

Imagina que dentro del bucle while haces cálculos numéricos y se produce una división por cero, en este caso, se corta la ejecución en esa linea y el cursor de la pantalla se queda con el reloj de arena.

Al colocar un Try .. finally, aunque se produzca un error, siempre ejecutará el código existente en el Finally, por tanto, se restaura siempre el cursor a la típica flecha.

Cita:
Empezado por jorgito
lo que quiero saber es...mira por ejemplo:

While ...Do
begin
Realiza la acción hasta que se cumpla la condicón.
end;

Ya entiendes?,
No, realmente no.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 03-07-2006
jorgito.crazy jorgito.crazy is offline
Miembro
 
Registrado: may 2006
Posts: 54
Poder: 19
jorgito.crazy Va por buen camino
Thumbs up

Muchas gracias Lepe, ahora entiendo.

Un saludo
Responder Con Cita
Respuesta



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
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 11:01:19
Reemplazar "," por ":" en un punto flotante DTAR SQL 2 09-05-2006 23:55:07
porque no me reconoce los caracteres "*" ni "%" cuando filtro mrmago Conexión con bases de datos 10 27-01-2006 04:21:16
Tipo de Variable."String" ó "Double" UTECYBER OOP 7 15-12-2003 20:25:39


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


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