ďťż

Ładny brzuch

No wiec tak, na formie mam Gauge i FTPa. Nie wiem jak zrobić, żeby w gauge wyświetlał mi sie procent aktualnie pobieranego pliku. Próbowałem kombinować z Timerem i tam sprawdzac co sekunde wielkość sciągniętego pliku, później z tego obliczac procent i pakowac do gauge, ale plik sie ściągnął a ja jeszcze nie zdążyłem zobaczyć gauge, bo program miał zwieche w trakcie sciągania :huh: Widziałem kiedyś coś o wyświetlaniu procentu pobieranych danych przy okazji przeglądania jakiegoś przykładu na 4P, ale teraz za pigmeja nie moge tego znaleźć. Wiem, że tam napewno do ściągania danych nie był wykorzystany FTP tylko coś innego. W każdym razie potrzebuje jakiegoś sposobu na wyświetlanie procentu pobranych danych.
Użytkownik Private edytował ten post 18 lipiec 2006, 20:22


Czym u Ciebie jest "FTP"?? W tym przykładzie wykorzystany był pewnie wininet ;)
Użytkownik Cyrkiel edytował ten post 18 lipiec 2006, 20:21

Czym u Ciebie jest "FTP"?? W tym przykładzie wykorzystany był pewnie wininet ;)

FTP z INDY
Chyba o wininet chodziło
Użytkownik Private edytował ten post 18 lipiec 2006, 20:39
Nie łaska sobie dema do indy ściągnąć i zobaczyć ? Masz w idFTP onWork, onWorkBegin (tutaj masz AWorkCountMax oraz AWorkCount), w onWorkEnd możesz zerować licznik.

use force ;]
Użytkownik -=PcSA=- edytował ten post 18 lipiec 2006, 21:01


WinInet jest dość prosty :eyebrow:
ProgressBar, bo gauge'a nie mam ;)procedure TForm1.Button1Click(Sender: TObject); var h, f:pointer; r:cardinal; buf:array[0..4095]of char; begin h:=wininet.InternetOpen(nil,INTERNET_OPEN_TYPE_DIRECT,nil,nil,INTERNET_FLAG_ASYNC); f:=InternetOpenUrl(h,'ftp://ftp.futuro.pl/pub/distributions/Aurox/install/10.2/ALL/addons/ ltsp/RPMS/headers/ltsp_i386-0-4.0-0.k12ltsp.2.4.0.noarch.hdr',nil,0,INTERNET_FLAG_PASSIVE,0); ProgressBar1.Max:=FtpGetFileSize(f,nil); repeat InternetReadFile(f,@buf,4096,r); ProgressBar1.StepBy(r); Application.ProcessMessages; until ProgressBar1.Position=ProgressBar1.Max; end;

A co tutaj mam źle bo mi wywala


Types of actual and formal var parameters must be identical

var hInet, hURL: HINTERNET; fSize : DWORD; sbuf : pointer; Buf : pointer; [...] fsize := HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, Buf, sbuf, nil);
Użytkownik Private edytował ten post 18 lipiec 2006, 21:35
Dwa ostatnie parametry zwracają typ cardinal, a cała funkcja boolean :)

Poszperałem po necie i przerobiłem troche kod Cyrkla na wersje nadającą sie do pobierania z http, teraz wygląda tak, może sie komuś kiedyś przyda

var h, f:pointer; r:cardinal; buf:array[0..4095]of char; procent : integer; size : dword; plik : file; dwBufLen, dwIndex : DWORD; buff : pointer; begin AssignFile(plik, 'gg71.exe'); Rewrite(plik, 1); h:=wininet.InternetOpen(nil,INTERNET_OPEN_TYPE_DIRECT,nil,nil,0); f:=InternetOpenUrl(h,'http://download.gadu-gadu.pl/gg71.exe',nil,0,0,0); dwBufLen := 1024; dwIndex := 0; GetMem(Buff, dwBufLen); HttpQueryInfo(f, HTTP_QUERY_CONTENT_LENGTH, buff, dwBufLen, dwIndex); Size := StrToInt(StrPas(Buff)); ProgressBar1.Max := (Size div 1024); FreeMem(Buff, dwBufLen); ProgressBar1.Max := size; repeat InternetReadFile(f,@buf,4096,r); BlockWrite(plik, buf, sizeof(buf)); ProgressBar1.StepBy(r); procent := round((progressbar1.Position / progressbar1.Max) * 100); button1.Caption := inttostr(procent) + '%'; Application.ProcessMessages; until ProgressBar1.Position=ProgressBar1.Max; CloseFile(plik); Application.Terminate; end;

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •