Ir al contenido


Foto

Componente para copiar archivo y ver el avance


  • Por favor identifícate para responder
9 respuestas en este tema

#1 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 295 mensajes
  • LocationMéxico

Escrito 10 julio 2009 - 05:21

Buen dia compañeros, alguien sabe de algun componente que se use para copiar archivos en windows y que tenga un evento para ver el progreso del copiado, para poner algun porciento ó tiempo restante a copiar....

:huh:
  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 11 julio 2009 - 09:54

Lo de copiar archivos lo podrias hacer por código, lo de los progresos pues Delphi cuenta con tres,

  • Progressbar - La tipica barra de progreso verde de algunos programas.
  • Shape - Se puede cambiar su apariencia, desde un cuadrado hasta un circulo y el progreso se muestra en azul.
  • Animate -  Las tipicas animaciones de Win de eliminar, copiar, pegar.

Saludos!
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 11 julio 2009 - 10:32

Aquí­ dejo un ejemplo rápido, tendrá sus fallas pero alguna idea te dará ;)

Saludos.
  • 0

#4 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 295 mensajes
  • LocationMéxico

Escrito 11 julio 2009 - 01:05

Eso ya lo sé, uso el CopyFile, pero la aplicación aparentemente se queda colgada, se empieza a poner semi blanca la ventana, el usuario no sabe, pero internamente se esta copiando 1 archivo de 1GB de otra pc por medio de la red local, ya intente poner una animacion pero pasa lo mismo no se mira, puse un label llenando puntos y pasa igual, meti un timer que se activa cada 2 segs, con el codigo :

Application.ProcessMessages;

Pero sigue igual se queda en blanco la pantalla de la aplicación, es por eso que ando buscando algun componente que copie un archivo y que tenga algun envento donde se cache el avance del copiado, no se si me explique ?????





  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 11 julio 2009 - 01:11

Pues si ese es el caso, hay un code de nuestro estimado ChackAll para esos casos y se llama Busy!, espero que te ayude.

Saludos.
  • 0

#6 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 295 mensajes
  • LocationMéxico

Escrito 11 julio 2009 - 01:13

No puedo entrar al enlace BUSY, me marca este mensaje:

El tema o foro que estás buscando parece que no existe, o fuera de tus lí­mites.
  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 11 julio 2009 - 01:16

No puedo entrar al enlace BUSY, me marca este mensaje:

El tema o foro que estás buscando parece que no existe, o fuera de tus lí­mites.


Perdón es que es un foro platino :$, dejame reproducirte el tema:

Es muy común que nuestras aplicaciones aparenten estar “colgadas” cuando realizan alguna operación compleja; dicha operación puede ser realizada por el sistema operativo al haberse llamado a una determinada API, en la espera de la finalización de un “Commit” por un motor de base de datos, por que “cargamos” con una montaña de información a un componente de terceros o por otra razón.

Cuando la causa de dicho problema es un bucle que el propio programador ha escrito, comúnmente opta por llamar a “Application.ProcessMessages” en cada repetición para ir liberando la cola de mensajes, con lo cual WM_PAINT, WM_MOUSEMOVE y otros mensajes, al ser procesados refrescan el estado de la ventana. Conociendo también el inicio y el final de dicho proceso incluimos una barra de progreso en la aplicación y junto a la ya citada llamada solucionamos el problema.

Pero cuando la operación dura un tiempo indeterminable y/o es imposible incluir dicha llamada porque el “bucle” se encuentra en un lugar inaccesible, llega a ser complicado asegurarse que el usuario sepa que la aplicación está “ocupada” y no puede responde adecuadamente.

Las aplicaciones se quedan “colgadas” porque el hilo principal (el encargado de procesar los mensajes) no puede procesar la cola de mensajes porque está “ocupado”. En dicho contexto la solución serí­a “introducir” el proceso “complicado” en un hilo adicional pero esto puede llegar a ser todo una hazaña. Tampoco es aconsejable procesar los eventos desde otro hilo porque comúnmente hacemos aplicaciones que trabajen en varios hilos.

Para solucionarlo adjunto una unidad que implementa dos funciones, la primera se encarga de crear una nueva ventana de progreso compatible con las últimas versiones de Windows en un hilo nuevo, el cual procesa sus propios mensajes mientras nuestra aplicación se encuentra realizando una determinada operación. La segunda llamada cierra dicha barra de progreso utilizando un evento como método de sincronización con el hilo previamente creado.

Ejemplos;

delphi
  1. uses _Busy;
  2.  
  3. procedure TForm1.Button1Click(Sender: TObject);
  4. begin
  5. BusyBegin('Haciendo "algo"...', Handle);
  6.  
  7. // ReadFile(hCOM, Buffer, SizeOf(Buffer), Count, nil);
  8. // StartService(hService, 0, PPChar(0)^);
  9. // connect(hSocket, name, SizeOf(Addr));
  10. // Busca('xxx*.mp*');
  11. // Hell.CommitTrans;
  12. // etc, etc...
  13. Sleep(6666);
  14.  
  15. BusyEnd;
  16. end;



delphi
  1. program Delphi2010;
  2.  
  3. uses
  4. Forms, _Busy,
  5. Unit1 in 'Unit1.pas' {Form1};
  6.  
  7. begin
  8. Application.Initialize;
  9. BusyBegin('Iniciando...', Application.Handle);
  10. Application.CreateForm(TForm1, Form1);
  11. Application.CreateForm(TForm2, Form2);
  12. Application.CreateForm(TForm3, Form3);
  13. Application.CreateForm(TForm4, Form4);
  14. Application.CreateForm(TForm5, Form5);
  15. Application.CreateForm(TForm6, Form6);
  16. // ...
  17. BusyEnd;
  18. Application.Run;
  19. end.



Enjoy!


Busy.pas

Saludos.
  • 0

#8 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.950 mensajes
  • LocationMadrid - España

Escrito 11 julio 2009 - 01:42

Usa CopyFileEx definiendo una función callback CopyProgressRoutine;)

Saludos.
  • 0

#9 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 295 mensajes
  • LocationMéxico

Escrito 13 julio 2009 - 09:57

gracias por sus respuestas, encontre un ejemplo que me callo como anillo al dedo, se los dejo por si alguien busca lo mismo....


http://www.clubdelphi.com/trucos/index.php?id=423&scroll=0&scrollb=0



  • 0

#10 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.950 mensajes
  • LocationMadrid - España

Escrito 13 julio 2009 - 11:00

Efectivamente, con CopyFileEx  (y)

Saludos.
  • 0