Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2008, 03:44   #1
Черничный
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 293
По умолчанию Доработка функции

Есть функция:

Код:
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin    
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;
SourceFile представляет собой что-то типа: http://site.ru/img.jpg
DestFile представляет собой что-то типа: img.jpg

Хотел бы еще реализовать сюда общий размер файла(ведь вместо имга можно и фаил качать), а так же сколько уже скачано(для реализации progressbar'a).

На примере картинке, после вызова функции и удачной скачки, можно ее загрузить в TImage с того места куда она была скачана. Так вот, а я хочу скачивать в TStream и соответсвенно загружать в TImage из TStream. Жду вашего хелпа

Последний раз редактировалось Черничный; 31.07.2008 в 03:49.
Черничный вне форума Ответить с цитированием
Старый 31.07.2008, 08:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Думаю что эта функа не позволит такого.
Тут либо нужно качать через Indy либо через функи модуля wininet, тогда и прогрессбар мона прикрутить.

Вот примерчик моей качалки:
Код:
     FileName:=dir_download+' - '+copyas(ListBox1.Items[ListBox1.ItemIndex],'/',-1);
        Application.Title:='Начинаю';
          hSession := InternetOpen('Operishe',
           INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
          caption:=inttostr(integer(hSession));
          if Assigned(hSession) then
          begin
            hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,INTERNET_FLAG_RELOAD, 0);
            caption:='файл № '+inttostr (integer(hfile));
            if Assigned(hFile) then begin
                AssignFile(f, FileName);
                Rewrite(f,1);
                fsize:=0;
                repeat
                  InternetReadFile(hFile, @Buffer, SizeOf(Buffer), BufferLen);
                  BlockWrite(f, Buffer, BufferLen);
                  fSize := fSize + BufferLen;
                  caption:=inttostr(i+1)+' из '+inttostr(ListBox1.Count) +' ('+inttostr(fsize)+') '+'['+inttostr(BufferLen)+']';
                until (BufferLen = 0);
                InternetCloseHandle(hFile);
            end;
            InternetCloseHandle(hSession);

         next:
         end;
ТОлько я не прикручивал прогрессбар
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2008, 14:23   #3
Черничный
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 293
По умолчанию

а где те переменные то с этими значениями?
Черничный вне форума Ответить с цитированием
Старый 31.07.2008, 14:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Какие переменные?

Вот прикладываю полный проект.
Вложения
Тип файла: rar Главная прога.rar (221.9 Кб, 18 просмотров)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2008, 00:59   #5
Черничный
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 293
По умолчанию

ну переменные, которым присваиваются значения общий размер и скока скачано
Черничный вне форума Ответить с цитированием
Старый 01.08.2008, 08:07   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я этого не делал ) Мне не нужно было.
В моем примере BufferLen - это сколько байт скачано за один вызов (у меня это число было 1024), вот при каждой итерации цикла (в моем примере) можно к отдельной переменке прибавлять этот BufferLen и таким образом узнавать сколько скачано

А вот как получить размер через wininet я точно не помню.
Посмотри на Delphi World в разделе Файлы и Интернет - [18]

Еще прорули качку через indy
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2008, 15:51   #7
Черничный
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 293
По умолчанию

ладно, а как в моем варианте скачивать в TSream?
Черничный вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработка Онлайн игры в стиле РПГ Splo1teR Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 31.07.2008 19:19
доработка алгоритма... Sota Помощь студентам 2 13.06.2008 15:45
Доработка программы... barmaJIei Фриланс 1 24.04.2008 21:23