Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Parar ejecucion de un proceso (https://www.clubdelphi.com/foros/showthread.php?t=52801)

trohan 31-01-2008 16:46:50

Parar ejecucion de un proceso
 
Hola he hecho un programita que borra por la red una carpeta que yo le especifique, pero suponiendo que quisiera parar el borrado no tengo la forma de hacerlo sino iendo al adminstrador de tareas y cerrar la aplicacion completa, cuando lo que en realidad me interesa es que el deje de hacer lo que le mande sin cerrar la aplicacion. Por tanto lo que necesito es el codigo para hacer un boton de parado. Espero me haya explicado bien, un saludo.

ixMike 31-01-2008 20:26:51

Bueno, según cómo hagas el borrado. Si utilizas la API SHFileOperation, pues con que se muestre la ventanita de progreso y le des al botón "cancelar" sobra.

Ahora, si lo que haces es un bucle para ir borrando los archivos según los encuentras, lo que has de hacer es meter (al principio o al final del bucle) esto:

Código Delphi [-]
var
  ...
  Cancelado: Boolean; //Variable global, al menos al formulario
  ...
begin
  Cancelado:=False;
  ....
  //while, for, repeat... lo que utilices
    begin
      ...
      Application.ProcessMessages;
      If Cancelado then Exit; //detiene la ejecución del código. Si sólo quieres salir del bucle, utiliza Break;
    end;  //final del bucle
  ...
end;

Además, coloca un botón "Cancelar" y en su evento OnClick, la línea Cancelado:=True;

El funcionamiento de esto es sencillo. Cancelado:=False es para inicializar la variable (hay que hacerlo cada vez que de les a "Borrar", para evitar que se pare después de que ya hayas cancelado una vez). Application.ProcessMessages sirve para procesar todos los mensajes que la aplicación tiene en cola (como pulsar en botón "Cancelar"). Si tras esto se ha pulsado el botón (Cancelado=True) entonces sale del bucle.

¡Pero atención! El ProcessMessages también toma otras acciones, como cerrar, minimizar... así que asegúrate de inhabilitar todo aquello que sea problemático antes de inicar el bucle, y después de reestablecerlo todo.

Espero que te sirva.


Salu2.

trohan 01-02-2008 15:03:31

POr alguna casualidad
 
Bueno si uso ShfileOperation conoces tu alguna manera mas limpia de hacer esto que explicaba, ya que luce poco hacer un programa y que cuando vaya a borrar saque una ventana aprte. Hubiese querido mostrar dentro del mismo el progreso de borrado. Sabes al menos otra funcion con la cual borrar sin que se muestre la ventana del shift del. pero recuerda todo esto es para hcerlo por la red. Te agradezcon mucho tu repuesta un saludo.

ixMike 01-02-2008 17:05:18

Bueno, si bien es cierto que nunca he trabajado en red, creo que la función DeleteFile puede borrar archivos en red, y donde estén.

Claro que, para borrar un directorio completo, viene más cómodo SHFileOperation, pero no tengo ni idea de cómo hacer que el progreso se haga dentro de tu ventana (creo que si se puede es cosa difícil).

Lo que también podrías hacer es un procedimiento que recorra todo el directorio que quieres borrar (encontrando subdirectorios y archivos) e ir borrando uno a uno, así puedes poner la opción de cancelar.

Queda a tu elección. De todas formas, cancelar el proceso de borrardo... no suele pasar que el usuario se arrepienta de la acción mientras se está llevando acabo, y aunque así sea, ya sería tarde, pues parte de los archivos ya se han borrado :(


Salu2.


La franja horaria es GMT +2. Ahora son las 14:41:30.

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