Download com barra de progresso
Veja neste artigo de Adriano dos Santos, como criar um projeto que faça download de arquivos com uma barra de progresso.
Bem amigos,
A dica de hoje fala sobre como criar um programa para fazer download com barra de progresso, algo bastante procurando entre os colegas em nosso Fórum. Para exemplificar isso Eu criei um exemplo bem simples. Este exemplo foi desenvolvido com a ajuda técnica dos membros Michael, Bruno e Martins do fórum ClubeDelphi. Muito obrigado amigos.
Bem, o segredo todo está na dll UrlMon.dll. Fazendo uma chamada a função UrlDownloadToFile podemos “baixar” o arquivo informando sua origem e seu destino, veja:
UrlDownloadToFile(nil, PChar(‘http://www.seudominio.com.br/arquivo.zip’), PChar(‘C:\Temp\arquivo.zip’), 0, nil);
Obs. Não esqueça de declarar a unit UrlMon na uses do seu projeto.
Para mostra o status de download, basta usar a interface IbindStatusCallback. Ela é responsável possui o evento onProgress que pode ser usado para atualizar uma ProgressBar. Para usa-la basta criar uma classe herdando seus métodos e propriedades e então criar a variável do tipo de sua classe para poder acessar as informações da Interface. Veja:
Declaração da Classe
type
TMeuObjetoInterface = class(TInterfacedObject, IBindStatusCallback);
public
function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
function GetPriority(out nPriority): HResult; stdcall;
function OnLowResource(reserved: DWORD): HResult; stdcall;
function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;
szStatusText: LPCWSTR): HResult; stdcall;
function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult;
stdcall;
function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult;
stdcall;
function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc:
PFormatEtc; stgmed: PStgMedium): HResult; stdcall;
function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult;
stdcall;
end;
Declaração e uso da Variável
procedure TForm1.Button1Click(Sender: TObject);
var
MeuEstatus: TMeuObjetoInterface;
begin
MeuEstatus := TMeuObjetoInterface.Create;
UrlDownloadToFile(nil, PChar(Edit1.Text), PChar(Edit2.Text), 0, MeuEstatus);
Form1.lblProgresso.Caption := 'Download concluído';
end;
Obs. As units UrlMon e ShellApi, ActiveX no uses do form.
Um abraço a todos.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo