Ver Mensaje Individual
  #11  
Antiguo 27-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
danielmj,

Cita:
Empezado por danielmj
...Lo que trato de conseguir es que el progreso de la barra avance segun se divida el tamaño del archivo entre la cantidad elegida...
Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   OpenDialog : TOpenDialog;
   F1 : TFileStream;
   Buffer : String;
   CountRead : Integer;
   FileLen : Integer;

begin

   OpenDialog := TOpenDialog.Create(self);
   OpenDialog.InitialDir := 'C:\';
   OpenDialog.Options := [ofFileMustExist];
   OpenDialog.Filter := 'All Files|*.*';
   OpenDialog.FilterIndex := 1;

   ProgressBar1.Min := 1;
   ProgressBar1.Max := 100;
   ProgressBar1.Position := 0;

   if OpenDialog.Execute then
   begin

      try

         F1 := TFileStream.Create(OpenDialog.FileName, fmOpenRead or fmShareDenyWrite);

         FileLen:= MaxInt div 1024; // MaxInt = 2147483647 

         SetLength(Buffer, FileLen);

         while F1.Position < F1.Size do
         begin

            CountRead := F1.Read(Buffer[1], FileLen);

            ProgressBar1.Position := Trunc((F1.Position/F1.Size)*100);

            Application.ProcessMessages;

         end;

      finally

         F1.Free;

         OpenDialog.Free;

      end;

   end;

end;
El código anterior lee un archivo de cualquier tamaño en porciones (MaxInt div 1024) y muestra su progreso en un componente TProgressBar normalizado en el rango de 1 a 100.

Nota: La idea es mostrar el proceso de un archivo en función porcentual y no en divisiones de su tamaño original, lo cual se adapta a cualquier tamaño de archivo hasta un máximo de 2^63 - 1.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 27-09-2013 a las 18:08:23.
Responder Con Cita