Por consincidência estou usando o FTP dos componentes Indy e está uma maravilha. vai o exemplo que peguei na NET.
// IdFTP1 é um TIdFTP // conecta no servidor FTP IdFTP1.Username := '...seu nome de usuário...'; IdFTP1.Password := '...sua senha secreta...'; IdFTP1.Host := '...nome do seu servidor...'; // exemplo: ftp.example.com IdFTP1.Connect; if IdFTP1.Connected then begin // transfere um arquivo texto IdFTP1.TransferType := ftASCII; IdFTP1.Put('c:\autoexec.bat', 'autoexec.bat'); // transfere um arquivo binário IdFTP1.TransferType := ftBinary; IdFTP1.Put('c:\command.com', 'meucommand.com'); // desconecta IdFTP1.Quit; end; . Olá a todos! Andei procurando muito pela web algum exemplo de como medir o progresso da transferência de um arquivo através do componente idFtp, no Delphi 6. Depois de muito procurar e nada encontrar, um pequeno exemplo que não funcionava muito bem me fez pensar um pouco e me levou, após alguns testes, a um medidor de progresso funcional, feito com um gauge. Para fazer um exemplo, coloque um componente idFTP, um ListBox e um Button no seu formulário. Configure o seu componente de conexão de acordo com os dados do ftp que irá se conectar e declare uma variável global chamada bytesToTransfer var Form1: TForm1; bytesToTransfer: integer; em seguida, faremos a conexão e o download de todos os arquivos .exe que estiverem no ftp. No exemplo, o código foi implementado no evento onClick do botão: procedure TForm1.Button1Click(Sender: TObject); var indice: integer; begin try //efetua a conexão ao FTP if IdFTP1.Connected then IdFTP1.Disconnect; IdFTP1.Connect(); //lista todos os arquivos do tipo .exe do ftp no ListBox1 IdFTP1.List(ListBox1.Items,'*.exe',false); //se não houverem arquivos, aborta if ListBox1.Items.Count = 0 then Abort; //para cada ítem do ListBox1 for indice:=0 to ListBox1.Items.Count -1 do begin try //marca o ítem selecionado ListBox1.Selected[indice] := true; //captura o tamanho do arquivo para a varíavel global bytesToTransfer := IdFTP1.Size(ListBox1.Items.Strings[indice]); //inicia a transferência do arquivo IdFTP1.Get(ListBox1.Items.Strings[indice], '<pasta local>' + ListBox1.Items.Strings[indice],true); except on e:exception do showmessage(e.Message); end; end; finally //desconecta IdFTP1.Disconnect; end; end; No eventoWorkBegin do idFTP, que é disparado no momento em que o Download do arquivo é iniciado, faça: procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin //limpa a barra de progresso Gauge1.Progress := 0; //define o tamanho máximo para o Gauge if AWorkCountMax > 0 then Gauge1.MaxValue := AWorkCountMax else Gauge1.MaxValue := bytesToTransfer; end; E finalmente, a cada conjunto de bytes trazidos pelo componente, incrementamos o Gauge. Isso é feito no evento Work do idFTP: procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin //incrementa o Gauge Gauge1.Progress := AWorkCount; end; É isso. Ficou bastante elegante mostrar o progresso do arquivo e o progresso total, este sendo medido atraves do número de itens da lista e o item atual sendo transferido. Espero que seja útil! Abraços a todos! --------------------------------------------------------- Eu esqueci o nome do autor, que o mesmo mim perdoe. Alexandre C Souza. ----- Original Message ----- From: "Vagner Gois" <vjbgg...@yahoo.com.br> To: <delphi-br@yahoogrupos.com.br> Sent: Monday, February 01, 2010 1:07 PM Subject: Res: [delphi-br] [MAF] FTP no Delphi 7 Boa tarde, Marcos Eu fiz um projeto aqui pra replicar dados entre servidores diferentes utilizando FTP com Delphi7 + Indy... O programa gera as triggers... E tem uma tabela que armazena os dados que vão sendo alterados... Parece loucura mas tinha um cliente que precisa disso... No final das contas o cara não vai mais usar.... :-( To mandando o projeto ai... Ve se te ajuda. sds Vagner SNT | IFX [DB, MK, DBS, PLAYER] :: SRB :: SCR :: SBI web :: http://snt.50webs.org msn :: vagner.g...@hotmail.com skype :: vagner.gois ________________________________ De: Marcos Abreu Ferreira <m.abreuferre...@hotmail.com> Para: delphi-br@yahoogrupos.com.br Enviadas: Segunda-feira, 1 de Fevereiro de 2010 12:19:36 Assunto: [delphi-br] [MAF] FTP no Delphi 7 Pessoal, estou desenvolvendo uma aplicação que irá fazer upload de arquivo texto. Tentei usar o componente do Indy Projects, mas não obtive o resultado esperado. Andei procurando na net e achei alguns exemplos usando DLL, mais precisamente a Wininet.dll da Microsoft. Vi que na minha máquina já tem, mas não consegui obter mais informações sobre ela, se já vem instalada no Windows, se tem algum problema de eu enviar uma versão e substituir a que já existe, etc... Alguém já usou essa DLL? Alguém conhece algum outro componente ou DLL gratuito e obteve um resultado bom? Minha aplicação envia arquivos txt de 20 em 20 segundos para o provedor, precisava de algo que verificasse se existe conexão com a internet, se a conexão ao servidor foi feita com sucesso, etc... Att, Marcos Ferreira ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>