|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
DOWNLOAD MA$TER :)
Код:
function Downl0ad_MasteR_XD(url:string; sfile:string) : string; var IdHTTP: TIdHTTP; memorystream: TMemoryStream; begin result:= ''; IdHTTP:=TIdHTTP.Create(nil); memorystream:=TMemoryStream.Create; try IdHTTP.Get(url, memorystream); memorystream.Position:=0; MemoryStream.SaveToFile(sfile); finally memorystream.Free; IdHTTP.Free; end; result:=':)'; end; возможно ли узнать когда завершается загрузка файла(ну типа что бы сработало прогрессбар ) и можно узнать сколько весит данный файл на сервере (перед тем как качается)? буду благодарен Последний раз редактировалось Программер_Х, 27.08.2010 в 12:45. |
#2
|
||||
|
||||
В Uses необходимо включить модуль: WinInet
Для определения размера файла воспользуемся следующей функцией: Код:
function GetUrlSize(const URL:string):integer; var hSession,hFile:hInternet; dwBuffer:array[1..20] of char; dwBufferLen,dwIndex:DWORD; begin Result:=0; hSession:=InternetOpen('GetUrlSize',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0); if Assigned(hSession) then begin hFile:=InternetOpenURL(hSession,PChar(URL),nil,0,INTERNET_FLAG_RELOAD,0); dwIndex:=0; dwBufferLen:=20; if HttpQueryInfo(hFile,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex) then Result:=StrToInt(StrPas(@dwBuffer)); if Assigned(hFile) then InternetCloseHandle(hFile); InternetCloseHandle(hsession); end; end; Код:
procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin i:=GetUrlSize('http://www.delphicode.ru/delphi.png'); showmessage(inttostr(i)); end; Последний раз редактировалось Admin, Сегодня в 10:32. |
#3
|
|||
|
|||
спасибо...
но если менять ссылку http://www.delphicode.ru/delphi.png на любую другую то пишет 0 и еще глючит(( |
#4
|
|||
|
|||
application.processmessages надо добавить где то
|
#5
|
||||
|
||||
Код:
begin idhttp1.Head('http://www.delphisources.ru/forum/images/misc/logo_ds_forum.gif'); memo1.Text:= inttostr(idhttp1.Response.ContentLength); memo2.Text:= idhttp1.Response.RawHeaders.GetText; end; |
#6
|
|||
|
|||
Цитата:
спасибо большое)) реально функция рулит!!! и даже не глючит прога)))) Код:
idhttp1.Response.RawHeaders.GetText; |
#7
|
||||
|
||||
событие OnWorkBegin:
IdHTTP1.Response.ContentLength что бы лишний HEAD не посылать прогресс апдейтим в OnWork OnWorkEnd - все, приехали -- или -- procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer); begin // AWorkCountMax - ничего не напоминает? end; procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); begin // AWorkCount - а чтобы это значило? end; procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin // приехали end; Последний раз редактировалось NumLock, 27.08.2010 в 14:55. |
#8
|
|||
|
|||
хех )
спасибо) я уже понял что сделать надо) хороший прогрессбар получился у меня=)) Код:
procedure Tfrmmain.TButtonOnClick(Sender: TObject); var MEMORYSTREAM: TMEMORYSTREAM; fname:string; begin fname:='http://MunitSystems.h1.ru/TrojanHackPass_by_M-UNIT.exe'; memorystream:=TMemoryStream.Create; idhttp1.Get(fname,memorystream); memorystream.Position:=0; MemoryStream.SaveToFile(extractfilename(fname)); memorystream.free; end; procedure Tfrmmain.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); begin progressbar1.Position:=aworkcount; end; procedure Tfrmmain.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); begin showmessage('start:)'); progressbar1.max:=AWorkCountMax; end; procedure Tfrmmain.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); begin MemoLog.lines.add(astatustext); end; procedure Tfrmmain.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode); begin showmessage('end:)'); end; почти у любого компонента есть Work (End, Begin, Status и т.д.) )) Последний раз редактировалось Программер_Х, 27.08.2010 в 15:24. |
#9
|
|||
|
|||
а как узнать что с какой скоростью качается данный файл?
|
#10
|
||||
|
||||
в IdHTTP1WorkBegin запоминаешь в глобальной переменной значение GetTickCount
в IdHTTP1Work высчитываешь разницу между текущим GetTickCount и запомненным. делишь AWorkCount на эту разницу и получаешь среднюю скорость закачки в байт/мс (!) умножаешь на 1000 и делишь на 1024 получаешь в кб/с (надеюсь я не напутал что-то ) получить мгновенную скорость немного сложнее, но по похожему принципу. |