fileSize := sRec.nFileSizeLow;
Оно там вообще нигде не используется
------------ Дoбавленo:
Да и вот это непонятно
while (bufsize > 0) do
begin
if not InternetReadFile(hFile, @buffer,READ_BUFFERSIZE,bufsize) then Break;
if (bufsize > 0) and (bufsize <= READ_BUFFERSIZE) then
st.Write(buffer, bufsize);
_hi_OnEvent(_event_onReadProgress,integer(st.position));
end;
InternetCloseHandle(hFile);
Ведь здесь стоит InternetCloseHandle, почему он не срабатывает
И в твое случае, откуда берется hFile, когда это локальная переменная и определяется дальше
hFile := FtpOpenFile(hFTP,PChar(fn),GENERIC_READ,FTP_TRANSFER_TYPE_BINARY, 0);