Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   poner un progressbar a URLDownloadToCacheFile (https://www.clubdelphi.com/foros/showthread.php?t=78003)

petete2008 12-03-2012 18:22:17

poner un progressbar a URLDownloadToCacheFile
 
Hola :
Necesito poner un progressbar para ver el proceso de descarga en la llamada a la siguiente función.
¿Alguien sabe como agregar el componente 'barra de progreso'?
Gracias.

Código:

function DownloadToFile(URL, FileName: String): Boolean;
var  lpszFile: Array [0..MAX_PATH] of Char;
begin
  // Download to cache by getting newest version
  if (URLDownloadToCacheFile(nil, PChar(URL), @lpszFile, MAX_PATH, BINDF_GETNEWESTVERSION, nil) = S_OK) then
    // Copy to desired file name
    result:=CopyFile(@lpszFile, PChar(FileName), False)
  else
    // Failed
    result:=False;
end;


ElDioni 12-03-2012 18:37:30

No he leido el hilo con los enlaces que lleva pero echale un vistazo que puede que te sirva de ayuda.

http://www.clubdelphi.com/foros/show...ht=progressbar

Saludos.

petete2008 12-03-2012 19:35:49

No me sirven porque en todo ellos siempre me descarga el mismo aunque yo modifique por ftp el fichero de la web.
Es como si me cogiera el de la cache del ordenador en lugar de FORZAR la "bajada" del fichero de nuevo.
De ahí que lo único que me ha funcionado es el código que he puesto.

petete2008 13-02-2013 12:23:06

Raro.....
 
Tengo el mismo código que tú y me acabo de dar cuenta de una cosa.

Supongamos que de donde quiero decargar tenemos dos ficheros. Por ejemplo :
http://www.rutas.com/fichero.sql y http://www.rutas.com/fichero.sql.gz

Pues bien...
Cuando le digo que descargue el http://www.rutas.com/fichero.sql me descarga el que termina en .gz
Y esto pasa siempre que tenga para el mismo nombre otro fichero con extensión .gz al final.

¿Alguien sabe la solución?
Yo quiero descargar el fichero con extensión .sql

Gracias

Casimiro Notevi 13-02-2013 12:52:13

Cita:

Empezado por petete2008 (Mensaje 454955)
Tengo el mismo código que tú y me acabo de dar cuenta de una cosa.

El mismo código que tú mismo :confused:

petete2008 13-02-2013 22:31:26

Era un problema del .htaccess que tenía redirecciones a gz en el caso que existiese.
Tema solucionado

nlsgarcia 14-02-2013 01:37:19

petete2008,

Cita:

Empezado por petete2008
Necesito poner un progressbar para ver el proceso de descarga en la llamada a la siguiente función...

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, WinINet, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function DownLoadFile( URL, FileName: String ): boolean;
var
   hInternetSession, hURL: HInternet;
   Buffer: array[1..1024] of Byte;
   ReadBuffer : Cardinal;
   F: File;
   FileSize : Cardinal;
   BufLen: DWORD;
   Index: DWORD;

begin

   try

      // Inicialización de las Funciones WinINet.
      hInternetSession := InternetOpen(PChar(ExtractFileName(Application.ExeName)), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
      if not Assigned(hInternetSession) then
      begin
         MessageDlg('Error de Apertura de Session de Internet',mtConfirmation,[mbOK],0);
         Result := False;
         Exit;
      end;

      Index := 0;
      ReadBuffer := 0;
      BufLen := Sizeof(FileSize);

      // Abre un recurso para FTP o HTTP Download.
      hURL := InternetOpenURL(hInternetSession, PChar(URL), nil, 0, 0, 0 );
      if not Assigned(hURL) then
      begin
         MessageDlg('Error de Apertura de URL',mtConfirmation,[mbOK],0);
         Result := False;
         Exit;
      end;

      // Obtiene informacion asociada al Http Request (Tamaño del archivo a download)
      HttpQueryInfo(hURL,HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, @FileSize,BufLen,Index);

      Form1.ProgressBar1.Max := FileSize;
      Form1.ProgressBar1.Position := 0;

      try

         AssignFile(F, FileName);
         Rewrite(F, 1);

         repeat

            Application.ProcessMessages;

            // Lee data del handle asociado a la funcion InternetOpenUrl para Download del archivo
            InternetReadFile(hURL, @Buffer, SizeOf(Buffer), ReadBuffer);

            // Escribe el archivo en Internet a disco.
            BlockWrite(F, Buffer, ReadBuffer);

            Form1.ProgressBar1.Position := Form1.ProgressBar1.Position + ReadBuffer;

         until ReadBuffer = 0;

         CloseFile(F);
         Result := True;

      except
         MessageDlg('Error de I/O en Archivo para Download',mtConfirmation,[mbOK],0);
         Result := False;
         InternetCloseHandle(hURL);
         InternetCloseHandle(hInternetSession);
         Exit;
      end

   except
      MessageDlg('Error de Apertura Internet-Session para Download',mtConfirmation,[mbOK],0);
      Result := False;
      InternetCloseHandle(hURL);
      InternetCloseHandle(hInternetSession);
      Exit;
   end;

   // Cierra el handle de Internet
   InternetCloseHandle(hURL);
   InternetCloseHandle(hInternetSession);

   MessageDlg('El Proceso de Download fue Realizado Satisfactoriamente',mtConfirmation,[mbOK],0);

   Result := True;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
   Url : string;
   FileName : string;

begin

   // Ejemplo de Download de archivo en el Club Delphi
   Url := 'http://terawiki.clubdelphi.com/Delphi/Manuales/?download=La_Cara_Oculta_De_Delphi_4_pdf_.zip';
   FileName := 'C:\La_Cara_Oculta_De_Delphi_4_pdf_.zip';

   DownLoadFile(Url,FileName);

end;

end.
El código anterior permite descargar un archivo en Internet por medio de las funciones de WinINet (Windows Internet) y muestra el progreso de la descarga en un control TProgressBar. Quizás esta solución se pueda adaptar a tu proyecto.

Nota: El servidor FTP o HTTP debe estar configurado para permitir descargas directas.

Espero sea útil :)

Nelson.

nlsgarcia 14-02-2013 13:41:21

petete2008,

El código fuente del Msg #7 con algunas modificaciones menores esta disponible en el link: http://terawiki.clubdelphi.com/Delph...on+WinINet.rar

Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 08:23:53.

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