FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
Quizás esto?
memo.lines.Add('lo que quiera añadir'); |
#3
|
|||
|
|||
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.... |
#4
|
||||
|
||||
Además de lo que dice el amigo Cadetill, tendrías que poner dentro del bucle:
Código:
Application.ProcessMessages 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:
|
#5
|
|||
|
|||
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; |
#6
|
||||
|
||||
¿Qué no basta mostrar el formulario del memo con ShowModal? Juaría que con esto, sin continue ni ProcessMessages bastaría.
// Saludos |
#7
|
||||
|
||||
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 |
#8
|
|||
|
|||
Cita:
|
#9
|
|||
|
|||
Cita:
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; |
#10
|
||||
|
||||
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; // Saludos |
#11
|
|||
|
|||
Gracias Roman "ShowModal" era precisamente lo que necesitaba.
Gracias al foro por su colaboración.... En cada una de las respuestas aprendemos algo nuevo |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|