Delphi для качков Лозовский Александр Xakep, номер #052, стр. 052-074-2 lpBuffer - буфер, через него мы будем читать файл. Как ты должен помнить, буфер - это массив. Таким образом, файл читается кусками, равными размеру этого массива, а у нас он объемом 1024 байта, т.е. один килобайт. dwNumberOfBytesToRead - какое количество байт необходимо прочесть. Он должен быть равен размеру нашего массива, т.е. 1024. lpdwNumberOfBytesRead - сколько же действительно байт прочитано. Если все отлично, то функция возвращает true, иначе - false. 4) function InternetSetFilePointer(hFile: HINTERNET; lDistanceToMove: Longint; pReserved: Pointer; dwMoveMethod, dwContext: DWORD): DWORD; stdcall; Для незнакомых с SetFilePointer поясню. Эта функция сдвигает позицию чтения файла на заданное число байт. Т.е. если тебе надо прочитать файл не с начала, а с отметки 1000 байт, то пользуйся InternetSetFilePointer. Вот ее параметры: hFile - этот параметр уже рассматривался. lDistanceToMove - на какое количество байт смещать указатель. pReserved - оставлено до лучших времен, а само значение должно быть равно нулю. dwMoveMethod - откуда делать смещение: FILE_BEGIN - с начала. FILE_END - с конца :). FILE_CURRENT - с текущей позиции. dwContext - должно быть нулем. Как ты уже догадался, эта функция и будет обеспечивать нам докачку. Если коннект прервется на отметке 1.2 Мб, то мы сможем вернуться на нужную нам позицию. При успешном возврате функция вернет значение в 1.2 Мб. Но учти, если сервак не поддерживает докачки, то файл придется читать с самого начала. 5) function InternetQueryDataAvailable(hFile: HINTERNET; var lpdwNumberOfBytesAvailable: DWORD; dwFlags, dwContext: DWORD): BOOL; stdcall; Она выясняет объем доступных данных, т.е. размер запрашиваемого файла. Пояснения: hFile - переменная типа HINTERNET. Уже рассматривалась выше. lpdwNumberOfBytesAvailable - доступные байты. dwFlags - ставь в 0. dwContext- здесь также установи 0. 6) function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall; В InternetCloseHandle нет ничего сложного. Эта функция просто закрывает интернет-сессию. Все. С разбором функций мы закончили. Их тебе хватит для написания примитивного гетрайта :). А если ты ознакомишься с MSDN'овскими доками и поймешь работу потоков... Тогда я буду ждать 80% скидки на твой VasyaExtraGet за 9.99$ :). Так что закрывай журнальчик, попей пивка, и садись кодить. Главное, не убей правильное настроение. Если его пока нет, не расстраивайся, будем писать вместе :). ИНТЕРФЕЙС Кидай на форму два TEdit, четыре TLabel, SaveDialog и 4 Кнопки. Постарайся расположить это добро как на рис.1: Первые 3 кнопки обзови (параметр "caption"): "Загрузить", "Отмена" и "Выход", а на четвертой поставь 3 точки. Label’ы будут называться так: label1: "Откуда качать?" label2: "А куда сохранять?" label3: "Размер файла:" label4: "0" В общем, постарайся соответствовать рисунку 2. На нем все предельно ясно, так что перейдем к самому процессу кодинга. КОДИНГ Для начала добавь в раздел public объявление переменной NADO: boolean; (она нужна для прерывания загрузки), создай событие OnClick для 4-й кнопки и впиши туда такой код: |