13.08.2007
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:Temparquivo.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.
Fonte:
http://www.devmedia.com.br/articles/viewcomp.asp?comp=306
|