Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Lightbulb 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!

Última edición por Casimiro Notevi fecha: 18-08-2012 a las 18:12:26.
Responder Con Cita
  #2  
Antiguo 18-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
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;
Responder Con Cita
  #3  
Antiguo 18-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, al principio pones:
Código Delphi [-]
progressbar1.Max :=2;
Por lo tanto, de ahí no va a pasar.
Responder Con Cita
  #4  
Antiguo 18-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jonydread Ver Mensaje
encontre lo que necesitaba
¿Pero tú qué quieres hacer?, eso no tiene ninguna lógica ni utilidad real.
Responder Con Cita
  #5  
Antiguo 18-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
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

Última edición por jonydread fecha: 18-08-2012 a las 19:08:57.
Responder Con Cita
  #6  
Antiguo 18-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que no veo el proceso que quieres controlar con la barra de progreso.
Responder Con Cita
  #7  
Antiguo 18-08-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.

Última edición por escafandra fecha: 18-08-2012 a las 22:37:11.
Responder Con Cita
  #8  
Antiguo 19-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
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!
Archivos Adjuntos
Tipo de Archivo: rar Unit1.rar (3,4 KB, 9 visitas)
Responder Con Cita
  #9  
Antiguo 19-08-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #10  
Antiguo 19-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
ok gracias una vez mas
Responder Con Cita
  #11  
Antiguo 21-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
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!
Responder Con Cita
  #12  
Antiguo 22-08-2012
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Talking

Cita:
Empezado por jonydread Ver Mensaje
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;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Enviar Mail con Indy + mostrar avance progressbar amadis Internet 7 03-02-2010 14:12:07
Actualizar ProgressBar segun se rellena una StringGrid ó DBGrid jaimeh Varios 8 19-12-2007 13:35:51
problemas avance locate anubis Tablas planas 1 16-06-2007 05:27:17
Barra de Avance de Proceso natalinuyo Varios 5 13-02-2007 20:57:35
Barra de avance JorgeBec Varios 1 30-06-2004 23:41:27


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


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
Copyright 1996-2007 Club Delphi