Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Descargando archivos de actualizaciones de mi aplicación (https://www.clubdelphi.com/foros/showthread.php?t=1819)

madman 29-06-2003 00:24:55

Descargando archivos de actualizaciones de mi aplicación
 
Hola!

Entre mis proyectos tengo un editor que me permite escribir programas en ensamblador.
Actualmente voy en la versión 3 (aunke más bien es 2.5, pero ya diseñe el entorno con el numero y presentaciones con el #3 :D :D :D :D )

He aki el unit que tengo para poder descargar un archivo de internet.

Código:

...
...
...
implementation

uses InfoDownForm;

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin

FormInfoDown.ShowModal;
if FileExists(ExtractFileDir(Application.Exename)+'\infoupdates.txt') then
begin
 Memo1.Lines.LoadFromFile(ExtractFileDir(Application.Exename)+'\infoupdates.txt');
 Label3.Caption:=Memo1.Lines[7] //Aki esta el tamaño del archivo que se descargara,
                              //para compararlo con el tamaño del que se esta bajando.

end
else
begin

 Memo1.Lines[0]:='No existe ninguna información sobre alguna actualización.';
 BitBtn1.Enabled:=False;
 CheckBox1.Enabled:=False;
end
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
begin

Timer1.Enabled:=True;
UrlDownloadToFile(nil, 'http://www.sitio.com/archivo.zip',
                  PChar(ExtractFileDir(Application.ExeName)+'\archivo.zip'), 0, nil);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var

  f: file of Byte;
  size: Longint;
begin
if fileexists(ExtractFileDir(Application.ExeName)+'\archivo.zip') then
begin

    AssignFile(f, ExtractFileDir(Application.ExeName)+'\archivo.zip');
    Reset(f);
    try
      size := FileSize(f);
      Label4.Caption:=IntToStr(Size); //Muestra los bytes bajados del archivo
    finally
      CloseFile(f);
    end;
end;
end;

end.

Como podrán ver si descarga el archivo, todo funcionaría de maravilla, excepto... que al darle URLDownloadToFile, se para mi aplicación (aunke si esta descargando el archivo).

Mi problema es que mientras descargo intento mostrar el avance de la descarga, pero mi Form no se actualiza hasta que la misma descarga ha finalizado.

Intento hacerlo tambien con:
Código:

procedure TForm1.BitBtn1Click(Sender: TObject);
var

  stream: TFilestream;
begin
//Timer1.Enabled:=True;
stream:= TFileStream.Create(ExtractFileDir(Application.ExeName)+'\bnotas.zip',fmCreate);
  try
    IdHTTP1.Get('http://www.geocities.com/frogsoftx/updates/bnotas.zip',stream);
  finally
    stream.Free;
  end;
//UrlDownloadToFile(nil, 'http://www.geocities.com/frogsoftx/updates/bnotas.zip',
                    PChar(ExtractFileDir(Application.ExeName)+'\bnotas.zip'), 0, nil);

end;

Pero tambien se congela.

¿Que alternativa existe para que yo pueda lograr mi objetivo?

Me imagino que tendría que meterme a descargar byte por byte 'manualmente' y así poder llevar la cuenta, pero no se como.

__hector 29-06-2003 20:18:20

Lo que pasa es que parece que el componente no realiza conexiones asincronas, asi que espera que se descargue el archivo para continuar con el programa. Mira a ver si esto te sirve:

http://beta.experts-exchange.com/Pro..._20349921.html

Sino, pues puedes utilizar otros metodos de descarga. Si no sales a flote con ese ejemplo, dejanos saber para evaluar otras opciones ;)

madman 30-06-2003 06:47:09

Gracias hector!

Probare el contenido del link lo antes posible, y dare mis observaciones al respecto.

madman 30-06-2003 17:32:05

Funciona perfectamente!

Con modificaciones se logra lo que uno quiere.

Gracias hector!


La franja horaria es GMT +2. Ahora son las 00:04:02.

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