Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como copar un dirctorio con el progressbar1 (https://www.clubdelphi.com/foros/showthread.php?t=52320)

kurono 17-01-2008 06:48:05

como copar un dirctorio con el progressbar1
 
hola de nuevo amigo ya se como copiar un diretorio pero como ponerle un progressbar1 a la oprecion de copiado a qui le muestro el codigo y me gustaria q me dijieran como ponerle un progressbar1 a este codigo

Código Delphi [-]
 
function CopiaTodo(Origen,Destino : String) :
  LongInt;
  var
 F : TShFileOpStruct;
 sOrigen, sDestino : String;
  begin
 Result := 0;
 sOrigen := Origen + #0;
 sDestino := Destino + #0;
 with F do
 begin
   wFunc := FO_COPY;
   pFrom := @sOrigen[1];
   pTo   := @sDestino[1];
   fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION
 end;
 Result := ShFileOperation(F);
end;
begin
CopiaTodo('F:\archivos c\*.*','c:\archivos c\');
end;
end.

PeterPunk 17-01-2008 13:26:00

No es exactamente lo que quieres, pero si añades ZeroMemory(@F,SizeOf(F));[color=black] al código, se muestra la ventanita de copiar indicando que archivos está copiando y cuánto tiempo falta. También podrías utilizar FOF_NOCONFIRMMKDIR si el directorio destino no existe
Código Delphi [-]
function CopiaTodo(Origen,Destino : String) :   LongInt;
var
  F : TShFileOpStruct;
  sOrigen, sDestino : String;
begin
  Result := 0;
  sOrigen := Origen + #0;
  sDestino := Destino + #0;
  ZeroMemory(@F,SizeOf(F));
  with F do
    begin
      wFunc := FO_COPY;
      pFrom := @sOrigen[1];
      pTo   := @sDestino[1];
      fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR
    end;
  Result := ShFileOperation(F);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CopiaTodo('d:\Borland_delphi_7\*.*','d:\BD7\');
end;

De todas formas si quieres que se muestre en tu propio progressbar me parece que tendrás que ir enviando archivo por archivo a copiar para controlar lo que vas copiando. Algo así (me ayudo de una filelistbox para enviar los archivos):

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  filelistbox1.Directory:= 'd:\Borland_delphi_7';
  filelistbox1.Update;
  progressbar1.max:= filelistbox1.Count;
  progressbar1.Step:= 1;
  for i:= 0 to filelistbox1.Count - 1 do
    begin
      CopiaTodo('d:\Borland_Delphi_7\' + filelistbox1.Items.Strings[i],
                'd:\BD7\' + filelistbox1.Items.Strings[i]);
      progressbar1.StepIt;
    end
end;

Bueno, aquí deberías modificar algo el código para copiar los subdirectorios.
Aún así, este código no sería muy exacto ya que si copiamos 99 archivos de 1 Kb y un archivo de 200 Megas, hay un 1 % de la progressbar que tardaría en mostrarse muchísimo más que el resto, pues el progressbar depende del número de archivos y no del tamaño de estos.
La opción perfecta (no la voy a programar) sería saber cuánto ocupa el directorio entero y luego copiar por código delphi (sin la API de Windows) con BlockRead y BlockWrite e incrementar el buffer en la progressbar.
Saludos.

kurono 18-01-2008 01:40:30

ok lo revisare a ver que hago

cHackAll 18-01-2008 02:07:22

Tambien echale un ojo a éste truco.

Saludos


La franja horaria es GMT +2. Ahora son las 12:54:34.

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