Ver Mensaje Individual
  #4  
Antiguo 20-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
En principio el mismo sistema se puede utilizar para cualquier tipo de archivo. La función DownloadToStream baja el archivo y lo guarda en un stream, así que tenemos 2 opciones, guardarlo en un archivo o si lo vamos a cargar en algún objeto que tenga el método LoadFromStream podemos cargarlo directamente. Por ejemplo:

Código Delphi [-]
// Aquí usando la función DownloadToStream guardamos el archivo en disco
var
  Stream: TFileStream;
begin
  Stream:= TFileStream.Create('d:\1.html',fmCreate);
  try
    DownloadToStream('http://www.google.es/',Stream);
  finally
    Stream.Free;
  end;
end;

Pero no todo es perfecto, este método bloquea la aplicación mientras se descarga el archivo. Si el archivo es grande y la conexión es lenta la aplicación parecerá congelarse. Una posible solución es utilizar un Application.ProcessMessages dentro del método DownloadToStream, otra solución seria usar los componentes Indy para realizar la descarga.

Código Delphi [-]
      while (InternetReadFile(hUrl, @Buffer, sizeof(Buffer), BytesRead)) do
      begin
        if (BytesRead = 0) then
        begin
          Result := TRUE;
          break;
        end;
        Stream.WriteBuffer(Buffer,BytesRead);
        Application.ProcessMessages; // <-- Añadir esto
      end;
Responder Con Cita