![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Код:
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; |
|
#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 получаешь в кб/с (надеюсь я не напутал что-то )получить мгновенную скорость немного сложнее, но по похожему принципу. |