Ver Mensaje Individual
  #2  
Antiguo 17-01-2008
Avatar de PeterPunk
PeterPunk PeterPunk is offline
Miembro
 
Registrado: ene 2008
Ubicación: Vigo
Posts: 22
Reputación: 0
PeterPunk Va por buen camino
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.

Última edición por PeterPunk fecha: 17-01-2008 a las 13:32:34.
Responder Con Cita