madman
29-06-2003, 00:24:55
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.
...
...
...
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:
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.
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.
...
...
...
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:
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.