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-й кнопки и впиши туда такой код:

Назад на стр. 052-074-1  Содержание  Вперед на стр. 052-074-3

Hosted by uCoz