![]() |
|
#1
|
|||
|
|||
![]() 1. Недавно начал делать прогу которая скачивает файлы из интернета. При скачивании форма тормозит. Что надо сделать чтобы форма не тормозила при скачивании?
2. Как определить размер скачиваемого файла в килобайтах? Заранее спасибо |
#2
|
||||
|
||||
![]() Чем качаешь? Если IdHTTP, то в событии OnWorkBegin есть константа - AWorkCountMax содержит размер файла в байтах.
Чтобы не тормозила программа добавь на форму компонент IdAntiFreez Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#3
|
|||
|
|||
![]() Вот код. Shadow спасибо за антифриз
Код:
var F: File; ResumePos, BufferLen, SumSize: DWORD; hSession, hURL: Hlnternet; Buffer: array[1..1024] of Byte; err: boolean; begin SumSize := 0; ResumePos := 0; //Инициализируемся AssignFile(F, Edit2.Text); //Свяжемся с файлом IF FileExists(Edit2.Text) then //Есть ли на диске этот файл begin Reset(f,1); //Ax, есть? Откроем! ResumePos := FileSize(F); //Откуда докачать Seek(F, FileSize(F)); //А писать будем в конец end else ReWrite(f,1); //А раз нет, так создадим NADO := TRUE; //Надо качать... //Открыли сессию hSession := lnternetOpen('X-Kachalka', PRE_CONFIG INTERNET_ACCESS, nil, nil, 0); //И наш УРЛ hURL := lnternetOpenURL(hSession,PChar(Edit1.Text),nil, O, 0, O); //Сколько там наш файл весит? lnternetQueryDataAvailable(hURL, SumSize, 0, 0); labe4.Caption := IntToStr(SumSize); //Сообщим об этом if ResumePos>0 then //Если докачиваем, begin lnternetSetFilePointer(hURL,ResumePos,nil,0,0); //То сместимся end; REPEAT //Качаем err:= lnternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen); //Читаем буфер IF err= false then //Ошибка чтения begin ShowMessage ('Произошел облом :('); //Сообщим и выходим exit; end; BlockWrite(f, Buffer, BufferLen); //Пишем в файл Application. Processmessages; UNTIL (BufferLen- 0) Or (NADO= FALSE); //Качаем, пока не все или надо ShowMessage ('Успешно загружено!'); end; |