Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 28-11-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Se me ocurre que utilizes el evento "OnWorkEnd" del componente "TIdHttp". Dicho evento se disparará cuando se complete la descarga. En el mismo puedes comprobar el tamaño del archivo con el tamaño de la descarga. Lo primero puedes conseguirlo con el truco "Tamaño real de un archivo" que encuentras aquí mismo en el ClubDelphi. Lo segundo puedes conseguirlo echando un vistazo a la propiedad "IdHTTP.Response.ContentLength".

La cosa podría quedar más o menos así en el evento susomentado:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP: TIdHTTP;
    bProgresoDescarga: TProgressBar;
    procedure Button1Click(Sender: TObject);
    procedure IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
    procedure IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
    procedure IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetSizeOfFile(const Filename:string): Int64;
var Sr:TSearchRec;
begin
  try
    if FindFirst(FileName,faAnyFile,sr) <> 0 then
      raise Exception.Create('Archivo ' + FileName+' no encontrado');
    Result:= sr.FindData.nFileSizeHigh * maxdword + sr.Finddata.nFileSizeLow;
  finally
    FindClose(sr);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
begin
  fs := TFileStream.Create('C:\archivo.zip', fmCreate);
  try
    IdHTTP.Get('http://www.loturak.es/zip/loturak_0.9.zip', fs);
  finally
    fs.Free;
  end;
end;

procedure TForm1.IdHTTPWorkBegin(Sender: TObject;
 AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
  bProgresoDescarga.Max := IdHTTP.Response.ContentLength;
end;

procedure TForm1.IdHTTPWork(Sender: TObject;
 AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
  bProgresoDescarga.Position := AWorkCount;
end;

procedure TForm1.IdHTTPWorkEnd(Sender: TObject;
 AWorkMode: TWorkMode);
var
  tamanoArchivo: Int64;
  tamanoDescarga: Int64;
begin
  tamanoArchivo := GetSizeOfFile('C:\archivo.zip');
  tamanoDescarga := IdHTTP.Response.ContentLength;
  if (tamanoArchivo = tamanoDescarga) then
    ShowMessage('Descarga terminada con éxito')
  else
    ShowMessage('Hubo algún problema con la descarga');
end;

end.

El único problema que se me ocurre es que el Servidor no retorne el "ContentLength" del archivo. No es lo habitual, pero, puede suceder. Tendrías que hacer pruebas en tu caso. Es lo que se me ocurre a bote pronto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Maximizar correctamente piccolo2101 Varios 4 22-03-2014 13:35:59
MDI no se maximiza correctamente Lepe OOP 4 26-08-2010 18:42:37
RecordCount no funciona correctamente Hagen Firebird e Interbase 2 25-07-2006 23:23:41
Saber que se imprimio correctamente Alexander Impresión 2 13-06-2006 18:11:01


La franja horaria es GMT +2. Ahora son las 20:22:49.


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