Witam.
Jak zapewne wiecie w życiu każdego człowieka następuje taka chwila, że zaczyna on odczuwać potrzebę napisania w delphi, programu do pobierania plików z internetu... ;]
A tak na serio - samo pobieranie to jedna z łatwiejszych rzeczy, problem polega na tym że nie wiem jak odczytać dane, niezbędne do komfortowego pobierania (wielkość pliku, postęp w pobieraniu, szybkość transferu itd).
Na początek starałem się zmajstrować coś w oparciu o bibliotekę UrlMon. UrlDownloadToFile jest niezłe (ze względu na prostotę), ale ma też sporo wad. Miewa konflikty z Internet Explorerem, blokuje możliwość używania timera i podobnych komponentów (odpalają się one dopiero PO pobraniu pliku), no i nie pobiera pliku skokowo (w pakietach), działa raczej jak torrenty - tworzy opakowanie (o odpowiedniej wielkości) a potem je wypełnia...
Jego budowa wygląda tak:
UrlDownloadToFile(Caller: IInterface, URL: PChar, FileName: PChar, Reserved: Cardinal, StatusCB: IBindStatusCallBack);
Czytałem że w tym "StatusCB: IBindStatusCallBack" znajdują się jakieś informacje na temat pobierania, ale nie mam koncepcji jak to odczytać...
Potem było Indy (wtyczka idHttp - funkcja Get). Pobieranie również jest bardzo proste, ale wady są zbliżone jak u powyższego - co utrudnia użytkowanie. Dodatkowo zdarzenia onWork i onWorkBegin zdają się nie działać poprawnie (kod w nich zawarty wykonuje się dopiero PO pobraniu pliku...).
Na koniec posłużyłem się komponentem HttpGet i (początkowo) sukces był, i to spektakularny. Niestety komponent ten również nie zadawala mnie do końca. Można odczytać wielkość pliku i postęp w pobieraniu, ale brakuje szybkości transferu, czy czasu potrzebnego na pobranie. Oczywiście te dane można wyliczyć dysponując pozostałymi, ale niestety wychodzi to dość koślawo (bo trzeba się posłużyć timerem i wszystko staje się jakby mniej dokładne, transfer dziwnie szaleje, co przy pobieraniu z IE się nie dzieje. Podobnie jest z czasem do końca pobierania, mam powiedźmy 1 min i 20 sec, a za sekundę robi się 20 sec, by za chwilę znów podskoczyć i zmienić się w 5 minut...).
Moje pytanie jest więc takie: Co możecie mi polecić do napisania prostego programiku w delphi, który będzie pobierał pliki i monitorował tych kilka wartości???
PS. Kombinowałem też coś z bibliteką WinInet, ale jest ona dosyć skomplikowana (chyba za bardzo jak dla mnie :P).
PS2. Wiem że to pytanie padało już nie raz (przeszukałem około 35 stron na forum), ale jakoś nigdy nie została udzielona satysfakcjonująca odpowiedź... Był jeden link do kodu źródłowego (który wyglądał na dobry), ale z komentarzami po niemiecku... A ja nie szprecham więc niezbyt wiele zrozumiałem.
Pozdro!