Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 11.04.2015
Сообщений: 55

TIdHTTP в отдельном потоке и прогресс бар на основной форме

17.12.2015, 00:21. Показов 1541. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть TIdHTTP (upd) в отдельном потоке и надо отобразить хот загрузки файла на основной форме. Все бы хорошо, но значение AWorkCountMax всегда равно нулю((( Скачиваю так:
C++
1
Form1->upd->Get(...);
Кто нить что нить знает(?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2015, 00:21
Ответы с готовыми решениями:

Отображения на форме текстового сообщения с информацией о ходе расчета в отдельном потоке
Делаю программу, которая занимается вычислениями. Вычислений много и если их не вынести в отдельный поток, то программа выглядит подвисшей,...

Как сделать прогресс бар туда-сюда в С++ Builder 6?
В .NET можно менять bricks или marquee,а в билдере как?

Как сделать прогресс-бар при загрузке данных ADOTable?
Как сделать прогресс-бар при загрузке данных ADOTable в C++ Builder?

7
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
17.12.2015, 00:53
В событии idHTTP->onWorkBegin есть переменная AWorkCountMax - это размер файла,
ставь его на Progressbar1->Max.
И в событии OnWork ставь Progressbar1->position=AWorkCount т.е. то, что скачано
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
17.12.2015, 01:09
primerb, сюда ходи: IdFTP & ProgressBar бар стоит на нуле! (и сюда: ProgressBar и Mail Agent) , чтобы уберечься от ошибок
1
1 / 1 / 0
Регистрация: 11.04.2015
Сообщений: 55
17.12.2015, 17:36  [ТС]
Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::updWorkBegin(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCountMax)
{
    TMemoryStream *au = new TMemoryStream;
    try {
        IdMessage1->SaveToStream(au);
        aubar->Max = au->Size;
    }
    __finally {
        FreeAndNil(au);
    }
}
не пашет. просто виснет и ничего не качает

если так:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::updWorkBegin(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCountMax)
{
    TMemoryStream *au = new TMemoryStream;
    try {
        IdMessage1->SaveToStream(au);
        aubar->Max = au->Size;
    }
    __finally {
        //FreeAndNil(au);
    }
}
то качает - но размер всегда - 42. я так понимаю это размер первого скачаного файла...

пробовал так:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::updWorkBegin(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCountMax)
{
    TMemoryStream *au = new TMemoryStream;
    try {
        IdMessage1->SaveToStream(au);
        aubar->Max = au->Size;
    }
    __finally {
        delete(au);
    }
}
тоже ничего(((
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
17.12.2015, 17:43
ой какой кошмар = (. Вам же volvo, скинул ссылки, а ВЫ чудите и выше я так же показал как определять размер файла. Зачем вы создаете в событиях TMemoryStream ?

Все что надо

раз
C++
1
2
3
4
void __fastcall TForm1::updWorkBegin(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCountMax)
{
        aubar->Max =AWorkCountMax;
}
два ( в другом событии)
C++
1
2
3
4
5
6
void __fastcall TForm1::updWork(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCount)
 
{
aubar->Position=AWorkCount
}
//---------------------------------------------------------------------------
0
1 / 1 / 0
Регистрация: 11.04.2015
Сообщений: 55
17.12.2015, 20:17  [ТС]
ты нормальный? я в первом посте написал... ОН В ПОТОКЕ ПОЭТОМУ AWorkCountMax ВСЕГДА РАВЕН НУЛЮ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ты думаешь я бы писал сюда если бы все было так просто???????????

Добавлено через 36 секунд
из ссылки volvo
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure TForm1.IdSMTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
   ProgressBar1.Position := AWorkCount;
   Application.ProcessMessages;
end;
 
procedure TForm1.IdSMTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
var
   s : TMemoryStream;
begin
   // AWorkCountMax постоянно = 0, поэтому получим размер другим способом
   s := TMemoryStream.Create;
   try
      IdMessage1.SaveToStream(s);
      ProgressBar1.Min := 0;
      ProgressBar1.Max := s.Size;
      ProgressBar1.Position := 0;
   finally
      FreeAndNil(s);
   end;
   Application.ProcessMessages;
end;
 
procedure TForm1.IdSMTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
   ProgressBar1.Position := ProgressBar1.Max;
   Application.ProcessMessages;
end;
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.12.2015, 22:31
Цитата Сообщение от primerb Посмотреть сообщение
ты нормальный? я в первом посте написал...
А ты?
Цитата Сообщение от primerb Посмотреть сообщение
ОН В ПОТОКЕ ПОЭТОМУ AWorkCountMax ВСЕГДА РАВЕН
И кто тебе доктор?
Из твоего калечного кода непонятно где там потоку взяться.
0
1 / 1 / 0
Регистрация: 11.04.2015
Сообщений: 55
18.12.2015, 22:45  [ТС]
У меня есть TIdHTTP (upd) в отдельном потоке и надо отобразить ход загрузки файла на основной форме. Все бы хорошо, но значение AWorkCountMax всегда равно нулю(((
12345
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.12.2015, 22:45
Помогаю со студенческими работами здесь

Как обновить прогресс бар, если основной поток ждет его
привет, вопрос как обновить прогресс бар, если основной поток ждет его? получается мы увидим только 0 и 100%. class MainWindow :...

Копирование файла в отдельном потоке с прокруткой прогресс бара
Перелопатив кучу информации так и не удалось реализовать, копирование файла в отдельном потоке прокруткой в прогресс баре (( Я...

Прогресс в отдельном потоке крашится при втором запуске
Всем привет. Имеется приложение, которое висит в трее и производит проверку обновлений по времени. Проверка происходит таким образом: ...

Прогресс бар на новой форме
Здравствуйте, проблема такая, пишу программу которая строит графы... есть вероятность что она будет строить граф долгое время, и хотелось...

Как перейти к следующей форме, когда прогресс бар max?
uses Unit4, Unit1, Unit2; {$R *.dfm} procedure THAVK_S.Timer1Timer(Sender: TObject); begin ProgressBar1.Position :=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru