Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   progressbar avance segun demore proceso (https://www.clubdelphi.com/foros/showthread.php?t=79880)

jonydread 18-08-2012 07:08:20

progressbar avance segun demore proceso
 
amigos me veo en la obligacion de solicitar una luz
el problema es el sgte tengo la progressbar pero solo he logrado que avance de a uno ProgressBar1.StepIt; pero necesito que avance gradualmente como podria hacerlo?
esto es lo que tengo
Código Delphi [-]
procedure TForm1.btintClick(Sender: TObject);
var
  destino,dir : String;
  archivo : Tstrings;
  i : integer;
  T0: TDateTime;
begin
  T0 := Now;
  progressbar1.Max :=2;
  ProgressBar1.Step := 1;
  ProgressBar1.Position := 0;
  destino := ruta1.Text+'\App';
  dir := ruta1.Text;
  for i:= 0 to Opendialog1.Files.Count -1 do
    XCopy(Handle, openDialog1.Files[i], destino);
  ProgressBar1.StepIt;
  if not DirectoryExists(dir) or not fileexists(dir+'archiv.ext') then 
  begin
    ForceDirectories(dir);
    archivo := TStringList.Create;
    archivo.Add('CLS');
    archivo.Add('@echo off');
    archivo.Add('Exit');
    archivo.SaveToFile(ruta);
    if fileexists(ruta) then 
    begin
      EditArchivo(ruta);
      ProgressBar1.StepIt;
      ListView2.Clear;
      ListView1.Clear;
    end else
      showmessage('error al crear archivo');
  end else
  begin
    EditArchivo(ruta);
    ProgressBar1.StepIt;
    ListView2.Clear;
    ListView1.Clear;
    ShowMessage(TimeToStr(Now - T0));
  end;
end;

gracias saludos!

jonydread 18-08-2012 18:25:20

encontre lo que necesitaba
http://www.clubdelphi.com/foros/showthread.php?t=40339
Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i: Integer;
begin
  ProgressBar1.Step := 1;
  For i := 1 to 100 do begin
     ProgressBar1.StepIt;
     sleep(300); //Espera 300 milisegundos, solo para ver el movimiento.
  end;
end;

Casimiro Noteví 18-08-2012 18:28:43

Hola, al principio pones:
Código Delphi [-]
progressbar1.Max :=2;
Por lo tanto, de ahí no va a pasar.

Casimiro Noteví 18-08-2012 18:30:04

Cita:

Empezado por jonydread (Mensaje 439901)
encontre lo que necesitaba

¿Pero tú qué quieres hacer?, eso no tiene ninguna lógica ni utilidad real.

jonydread 18-08-2012 19:01:07

necesito una progressbar a la medida que vaya realizando las acciones avance,algo asi como que calcule el tiempo restante y avance, y la unica forma que me ha resultado mas o menos lo que quiero lograr es
Código Delphi [-]
procedure TForm1.btintClick(Sender: TObject);
var
destino,dir : String;
archivo : Tstrings;
i,j : integer;
T0: TDateTime;
begin
T0 := Now;
ProgressBar1.Step := 1;
destino := ruta1.Text+'\App';
dir := ruta1.Text+'\sources';
for i:= 0 to Opendialog1.Files.Count -1 do
XCopy(Handle, openDialog1.Files[i], destino);
if not DirectoryExists(dir) or not fileexists(dir+'\arch.ext')
 then begin
ForceDirectories(dir);
archivo := TStringList.Create;
archivo.Add('CLS');
archivo.Add('@echo off');
archivo.Add('Exit');
archivo.SaveToFile(ruta1.Text);
if fileexists(ruta1.Text)
then begin
EditArchivo(ruta1.Text);
ListView2.Clear;
ListView1.Clear;
For i := 1 to 100 do begin
     ProgressBar1.StepIt;
     sleep(10);
  end;
ShowMessage(TimeToStr(Now - T0));
end else
showmessage('error al crear archivo');
end else
begin
EditArchivo(ruta1.Text);
ListView2.Clear;
ListView1.Clear;
For i := 1 to 100 do begin
     ProgressBar1.StepIt;
     sleep(10);
  end;
ShowMessage(TimeToStr(Now - T0));
end;
end;
lo malo es que al terminar de hacer todo espera y avanza la barra, y del modo que lo tenia antes avanza por parte pero no gradualmente

Casimiro Noteví 18-08-2012 20:20:01

Es que no veo el proceso que quieres controlar con la barra de progreso.

escafandra 18-08-2012 22:34:00

Ciertamente no está claro lo que quiere.

Usa mi finción XCopy diseñada para copiar de golpe una lista de archivos, pero la modifica para ir de archivo a archivo... perdió el sentido de la función.

Por otro lado, si quiwre controlar el progreso de la copia tiene varias opciones. Un ejemplo lo puede encontrar siguiendo este hilo.


Saludos.

jonydread 19-08-2012 05:38:16

1 Archivos Adjunto(s)
Cita:

Empezado por escafandra (Mensaje 439915)
Ciertamente no está claro lo que quiere.

Usa mi finción XCopy diseñada para copiar de golpe una lista de archivos, pero la modifica para ir de archivo a archivo... perdió el sentido de la función.

Por otro lado, si quiwre controlar el progreso de la copia tiene varias opciones. Un ejemplo lo puede encontrar siguiendo este hilo.


Saludos.

si he visto como realizar progreso de copia pero tambien hago aparte de eso una modificacion y creacion de un archivo por eso queria saber cmo se puede realizar con ambos
Código Delphi [-]
EditArchivo(ruta1.Text);

Código Delphi [-]
procedure TForm1.EditArchivo(rutArchivo: string);
var
   v:integer;
 begin
 try
memo1.Lines.LoadFromFile(ruta1.text+'\sources\$oem$\$$\Setup\Scripts\SetupComplete.cmd');
memo1.Lines.Delete(memo1.Lines.Count -1);
memo1.Lines.Add('Echo..........Install  program');
for v := 0 to ListView2.Items.Count - 1 do
Memo1.Lines.Add(ListView2.Items[v].Caption+ListView2.Items[v].SubItems[0]+' '+ListView2.Items[v].SubItems[1]);
memo1.Lines.Add('Echo..........Completado');
memo1.Lines.Add('Exit');
   finally
   memo1.lines.SaveToFile(rutArchivo);
  end
 end;

adjunto unit
saludos y gracias!

escafandra 19-08-2012 18:16:22

Escribir ese fichero desde un memo no va a cobsumir tiempo preciable en una barra de progreso. Lo lento va a ser la copia de archivos grandes. Si usas mi ejemplo con CopyFileEx, resuelves tu problema.

Para saber el valor del 100% suma los tamaños de los archivos a copiar. Modifica el ejemplo para usar CoptFileEx.
Si realmente entiendes como funciona, no vas a tener problemas en adaptarlo.


Saludos.

jonydread 19-08-2012 20:34:19

ok gracias una vez mas

jonydread 21-08-2012 06:00:37

amigo escafandra estoy aprendiendo recien sobre esto y trato de buscar antes de consultar para no dar lata jejej en fin adapte el codigo y funciona de lujo la progressbar pero como sabes en este hilo busco copiar varios archivos y con copyfileext no he encontrado si conoces alguna forma o de algun ejemplo agradeceria mucho.
saludos!

jonydread 22-08-2012 04:54:09

Cita:

Empezado por jonydread (Mensaje 440155)
amigo escafandra estoy aprendiendo recien sobre esto y trato de buscar antes de consultar para no dar lata jejej en fin adapte el codigo y funciona de lujo la progressbar pero como sabes en este hilo busco copiar varios archivos y con copyfileext no he encontrado si conoces alguna forma o de algun ejemplo agradeceria mucho.
saludos!

Lo siento siempre que me rindo se me ilumina en todo caso aca esta por si sirve tiene detalles es de pruebas pero funciona
Copiar varios archivos con CopyFileEx y barra de progreso en delphi
Código Delphi [-]
function ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle; lpData: Pointer): DWORD; stdcall;
var
   Value: integer;
begin
   Application.ProcessMessages();
   if(dwCallbackReason = CALLBACK_CHUNK_FINISHED) then

    Form1.ProgressBar1.Position:= (int64(TotalBytesTransferred) * 100) div int64(TotalFileSize);

   Result:= PROGRESS_CONTINUE;

end;
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
DestDir,SourceFile,Destino: string;
Counter: integer;
saveDialog : TSaveDialog;
begin
 for Counter := 0 to opendialog1.Files.Count - 1 do
  begin
   SourceFile := opendialog1.Files[Counter];
   saveDialog := TSaveDialog.Create(self);
   saveDialog.Filename := opendialog1.Files[Counter];

   DestDir:= extractfilepath(saveDialog.Filename);
   Destino := DestDir+'copia'+extractfilename(saveDialog.Filename);
   CopyFileEx(PChar(SourceFile),PChar(Destino), @ProgressRoutine, nil, @Cancel,0);
    ShowMessage(SysErrorMessage(GetLastError));
  end;
 end;


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

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi