Ver Mensaje Individual
  #1  
Antiguo 29-06-2003
Avatar de madman
madman madman is offline
Miembro
 
Registrado: may 2003
Ubicación: Nayarit, México
Posts: 242
Reputación: 24
madman Va por buen camino
Lightbulb 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 )

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.
__________________
Guía de Estilo.

Última edición por madman fecha: 29-06-2003 a las 00:33:56.
Responder Con Cita