Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TIdHTTP и Progress, глюки 
:(
    Опции темы
AriX
Дата 4.10.2004, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: нет
Всего: 19



У меня такой код...

Код

var
 FIdHTTP: TIdHTTP;
 FProgress, FSize: integer;

...

procedure TDlThread.Execute;
begin
 FIdHTTP := TIdHTTP.Create(MainForm);
 FIdHTTP.OnWorkBegin := OnDlBegin;
 FIdHTTP.OnWork := OnDl;
 FIdHTTP.HandleRedirects := true;

 FIdHTTP.Get(FUrl);
end;

procedure TDlThread.OnDl(Sender: TObject; AWorkMode: TWorkMode;
 const AWorkCount: Integer);
begin
 FProgress := Round(AWorkCount / FSize * 100);
 Synchronize(ShowProgress);
end;

procedure TDlThread.OnDlBegin(Sender: TObject; AWorkMode: TWorkMode;
 const AWorkCountMax: Integer);
begin
 FSize := AWorkCountMax;
end;

procedure TDlThread.ShowProgress;
begin
 MainForm.ProgressBar.Position := FProgress;
end;


При скачивании файла (хорошо видно на больших страницах) - прогресс-бар скачет - т.е. например, дойдет до 30, потом на 10, 0, 72, 50, 60, 10.. и т.д. Вообщем далеко не плавное заполнение... А надо сделать просто процесс скачивания файлика с указанием процента уже скаченного.

Что в данной ситуации можно сделать?
Заранее Спасибо!
PM MAIL   Вверх
Alkash
Дата 4.10.2004, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Хм, попробуй делить файл при скачке на куски и для каждого куска значение прогресс бара, должно получиться более- менее плавное перемещение Прогрессбары.


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
AriX
Дата 5.10.2004, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: нет
Всего: 19



Alkash
Хммм.. Не, все-таки лучше без делений - лишний код. И тем более все равно будет скакать.

Какие еще варианты предложите?
PM MAIL   Вверх
z-END
Дата 6.10.2004, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 1
Всего: 102



Тож была такая проблемма, но решил с ней не бороться, мож оно и не красиво но на функциональности работы НИКАК не сказывается.
Насколько я понимаю, это происходит по тому, что полученые данные сначала помещаются в буффер, а когда он заполняется, то только после этого они дописываются к файлу, и уже обработанное кол-во байтов передается в AWorkCount.
ЗЫ может имеет смысл делать не в процентах, а так:
ProgressBar.Max := FullFileSize;
ProgressBar.Position := AWorkCount;

Это сообщение отредактировал(а) nJIaKca.spb - 6.10.2004, 11:54


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
AriX
Дата 6.10.2004, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: нет
Всего: 19



nJIaKca.spb
Если никак не получится, я конечно на это забью smile.gif
Вот нашел такое свойство Response.ContentLength
По идее при запросе размер должен туда передаться - но че-то никак не получается :-/
Добавлено @ 12:28
аааа... на некоторые файлы в ответе присто не присылается ContentLength (вот здесь например - http://lib.ru/INPROZ/BAZEN/rezo_3.txt)
PM MAIL   Вверх
AriX
Дата 6.10.2004, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 16.6.2003

Репутация: нет
Всего: 19



Цитата
ProgressBar.Max := FullFileSize;
ProgressBar.Position := AWorkCount;

все равно глючит sad.gif
ЗЫ: или что ты имеешь ввиду под FullFileSize?

---
вот как я придумал

Код

 FStringStream := TStringStream.Create('');
 FIdHTTP.Head(FUrl);
 FSize := FIdHTTP.Response.ContentLength;
 FIdHTTP.Get(FUrl, FStringStream);
 FStringStream.Free;


Это сообщение отредактировал(а) AriX - 6.10.2004, 12:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.