Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2004
Majo Majo is offline
Miembro
 
Registrado: jun 2003
Posts: 43
Poder: 0
Majo Va por buen camino
Cool Interrumpir un for

Hola amigos

Tengo la siguiente duda...

Tengo un ciclo que realiza cierto proceso, resulta que quiero mostrar el proceso paso a paso, es decir, iteración por iteración. por ejemplo

for i :=0 to n-1 do
begin
{Lineas de algunos cálculos}
.... {Mostrar ciertos resultados de los cálculos en un memobox}...
{el proceso se continúa por ejemplo haciendo click en un botón}

{Continuar ejecutando otras lineas del ciclo para hacer mas cálculos}
.... {Mostrar ciertos resultados de los Nuevos calculos en un memobox}...
{el proceso se continúa por ejemplo haciendo click en un botón}

end;

Alguien puede decirme como puedo hacer lo anterior?

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 31-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Quizás esto?

memo.lines.Add('lo que quiera añadir');
Responder Con Cita
  #3  
Antiguo 31-03-2004
Majo Majo is offline
Miembro
 
Registrado: jun 2003
Posts: 43
Poder: 0
Majo Va por buen camino
En realidad lo que quiero es detener la ejecución del ciclo.

Como un "PARE" en cierta linea... Ejecutar una form con un botón.... esperar a que se de click sobre el boton.... y solo despues del click "CONTINUE" con la ejecución del ciclo....
Responder Con Cita
  #4  
Antiguo 31-03-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Además de lo que dice el amigo Cadetill, tendrías que poner dentro del bucle:
Código:
Application.ProcessMessages
Para que al pulsar cierto botón te haga caso y se pare y te pregunte si quieres seguir ó no.

Mirate la ayuda sobre Continue y también como abandonar un bucle en el supuesto de quisieras abandonar el ciclo antes de que finalice.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 31-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Vale, creo que no te entendí

a ver ahora (y teniendo en cuenta lo comentado por Marcos.....)

Código:
var
  Preguntar: boolean;

procedure TMiForm.ProcesoQueSeaQueHaceBucle(parametros);
begin
  Preguntar := false;
  for i :=0 to n-1 do
  begin
    if Preguntar then
      Application.MessageBox('Desea cancelar el proceso?', 'Atención', 
          MB_APPLMODAL or MB_ICONQUESTION or MB_YESNO) = mrYes then
      Break;

    // proceso del bucle
    Application.ProcessMessages;
  end;
end;

procedure TMiForm.BotonClick(Sender: TObject);
begin
  Preguntar := true;
end;
Responder Con Cita
  #6  
Antiguo 31-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Qué no basta mostrar el formulario del memo con ShowModal? Juaría que con esto, sin continue ni ProcessMessages bastaría.



// Saludos
Responder Con Cita
  #7  
Antiguo 31-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Te me adelantaste cadetill. Pero reitero lo dicho. No considero necesario ProcessMessages. Dicha línea no se ejecutará mientras esté desplegada la ventana modal. Y en el supuesto de que se ejecutara querría decir que el ciclo sigue corriendo mientras se muestra en lugar de pausarse como se requiere.

// Saludos
Responder Con Cita
  #8  
Antiguo 31-03-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por roman
Te me adelantaste cadetill. Pero reitero lo dicho. No considero necesario ProcessMessages. Dicha línea no se ejecutará mientras esté desplegada la ventana modal. Y en el supuesto de que se ejecutara querría decir que el ciclo sigue corriendo mientras se muestra en lugar de pausarse como se requiere.
Es que no se exactamente lo que quiere conseguir Majo. No se si es lo que tu dices (mostrar otro formulario, con lo cual, tendrías razón) o simplemente dar al usuario la posibilidad de cancelar (acabar) el bucle en cualquier momento
Responder Con Cita
  #9  
Antiguo 31-03-2004
Majo Majo is offline
Miembro
 
Registrado: jun 2003
Posts: 43
Poder: 0
Majo Va por buen camino
Cool

Cita:
Empezado por cadetill
Es que no se exactamente lo que quiere conseguir Majo.
Lo que realmente necesito es pausar el ciclo no salirme de él... para salirme de él creo que basta con Break. Al referirme a pausar, quiero decir que "pare" en cierta linea, para mostrar ciertos datos (POr ejemplo en memobox) y luego dado cierto evento, por ejemplo el click en un botón continue conla lineas del ciclo.

el código es el que sigue

Código:
Convergencia:=False;
while not Convergencia do
begin
    Picalc:=PCalculado(Vi,Di,Y);
    Qicalc:=QCalculado(Vi,Di,Y);
    Pprog:=PProgramada();
    Qprog:=QProgramada();
    DPi:=DP(Picalc,Pprog);
    DQi:=DQ(Qicalc,Qprog);
    DPi:=DividirPorVoltajes(DPi,Vi);
    DQi:=DividirPorVoltajes(DQi,Vi);
    
    HallarSubmatricesHNJL(H,N,J,L,Picalc,Qicalc,Vi,Di,Y);
    SetLength(L,NroDeBarras-1-Ng,NroDeBarras-1-Ng);

    VectorDP:=VectorColumna(DPi,VectorVacio);
    VectorDQ:=VectorColumna(DQi,VectorVacio);
    
    {Acá se debe mostrar una form que posee un memobox y un botón. En     
     el memobox se imprimen los vectores "VectorDP y Vector DQ. es en este 
     linea que quiero que el ciclo se pause y que solo continue cuando se de
     click sobre el boton aceptar. el problema que tengo es que la form se 
      muestra pero el ciclo no se detiene y sigue ejecutándose hasta que
      termina}

    Plasd:=Plasd+1;
    VectorDeltaD:=MultiplicarMatrices(InvMatReal(H),VectorDP);
    VectorDeltaV:=MultiplicarMatrices(InvMatReal(L),VectorDQ);


    if not convergencia then
        begin
         ActualizarV(Vi,VectorDeltaV);
         ActualizarD(Di,VectorDeltaD);
        end;
  end;
Responder Con Cita
  #10  
Antiguo 31-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues no hay ningún problema. Simplemente muestra el form con ShowModal. Probablemente lo intentas mostrar con Show lo cual, efectivamente, no detendrá el ciclo pero ShowModal sí. Por ejemplo, en este ciclo

Código:
var
  I: Integer;

begin
  for I := 0 to 10000 do
  begin
    Caption := IntToStr(I);
    if I = 5000 then Form2.ShowModal;
  end;
verás que la ejecución se detiene en 5000 y no se reanuda sino hasta que cierras Form2.

// Saludos
Responder Con Cita
  #11  
Antiguo 31-03-2004
Majo Majo is offline
Miembro
 
Registrado: jun 2003
Posts: 43
Poder: 0
Majo Va por buen camino
Cool

Gracias Roman "ShowModal" era precisamente lo que necesitaba.

Gracias al foro por su colaboración.... En cada una de las respuestas aprendemos algo nuevo
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


La franja horaria es GMT +2. Ahora son las 21:13:19.


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