Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366

ProgressBar не работает

28.07.2013, 22:29. Показов 2341. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане.
Кидаю на форму компоненты Timer, Button, ProgressBar.
Выставляю, что таймер по умолчанию выключен(Enabled = false), интервал таймера 10 мс. Ориентацию ProgressBar вертикальную, smooth = true.
В программе получаю два значения unsigned long, a и b.
В функции обрабатывающей нажатие кнопки пишу:
C++
1
2
3
4
5
void __fastcall TForm1::Button3Click(TObject *Sender)
{
         a = Reada();                                  //unsigned long a;
         Timer1->Enabled = true;
}
В функции обработчике таймера:
C++
1
2
3
4
5
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   b = Readb();                                       //unsigned long b;
   ProgressBar1->Position = (b/a)*100;
}
Число а постоянно уменьшается пока не достигнет 0. По идее, прогресс бар должен начать показывать значения, т.е. сначала быть полным, а потом при каждом считывании(срабатывании таймера) опускаться.
но на деле получается, что сначала он показывает полную шкалу, а сразу же при изменении значения a - полоска в нем пропадает.
Со значениями все в порядке, они считываются и верны.
Вопрос: Подскажите пожалуйста причину такого поведения прогрессбара?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.07.2013, 22:29
Ответы с готовыми решениями:

ProgressBar не работает
При копировании файлов открывается другая форма с ProgressBar'ом, показываю ее так Form2.Show. Все работает хорошо, но когда показываю...

ProgressBar не работает в потоке
Сразу оговорю, что короткие фразы вроде "юзай BackgroundWorker" и т.д. - безсмысленны, так как много пытался, но так и не подружил с этим...

Не работает ProgressBar в BackgroundWorker
Суть программы такова - с помощью асинхронности считывать построчно файл размером 1 ГБ, и искать желаемое слово в отдельном потоке, так что...

7
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
28.07.2013, 22:42
Xantrax,

C++
1
2
3
4
5
6
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   b = Readb();                                       //unsigned long b;
   ProgressBar1->Position = (b/a)*100;
   Application->ProcessMessages(); // это вам поможет увидеть изменения значений прогрессбара
}
0
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
28.07.2013, 22:43
Для ProgressBar важны значения свойств Min и Max. Вы это учитываете? В общем у вас появляется неправильное значение(скорее всего a). Пройдитесь отладчиком, посмотрите состояние этой переменной. Возможно, значение изменяется в программе? Имхо, сложновато сказать точную причину.

Не по теме:

Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
это вам поможет увидеть изменения значений прогрессбара
Тоже была такая мысль, почему-то отбросил:)

0
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
28.07.2013, 23:00  [ТС]
Application->ProcessMessages();
не помогает.
Для ProgressBar важны значения свойств Min и Max. Вы это учитываете? В общем у вас появляется неправильное значение(скорее всего a). Пройдитесь отладчиком, посмотрите состояние этой переменной. Возможно, значение изменяется в программе? Имхо, сложновато сказать точную причину.
Min = 0, Max = 100. Значение a кроме прогрессбара я отслуживаю в Edit. Там а сначала = максимальному, а потом изменяется в меньшую сторону... Как оно может быть не правильным.
Может интервал обновления слишком большой - 10мс?
0
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
28.07.2013, 23:17
Цитата Сообщение от Xantrax Посмотреть сообщение
сразу же при изменении значения a - полоска в нем пропадает.
Так полоска пропадает после первого изменения a? Попробуйте вместо TEdit значения выводить в TMemo в новую строку. Тогда точно поймете - не успеваете увидеть или ещё что-то.
0
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
28.07.2013, 23:35  [ТС]
Так полоска пропадает после первого изменения a?
да.
Добавил Memo, вот значения числа b с него:
Кликните здесь для просмотра всего текста
443
443
443
443
443
443
443
443
418
419
395
396
396
371
371
345
345
346
319
320
296
297
297
271
271
249
249
250
226
227
199
200
200
176
176
154
154
155

Вроде ничего криминального.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
28.07.2013, 23:35
(b/a)*100 при значении a = 0 вы получите исключение: Divide by Zero... вам следует проследить за тем, какие значение у вас получаются... потому что если a и b - integer, то результатом будет округленное значение(0, 1, 2...)... поэтому стоит писать так ((double) b / a) * 100 или хотя бы (b * 100) / a
1
20 / 20 / 2
Регистрация: 28.11.2012
Сообщений: 366
29.07.2013, 00:34  [ТС]
((double) b / a) * 100 или хотя бы (b * 100) / a
Хм, а в этих выражениях значит a не может быть равно 0 что ли? Тут тоже самое, если a=0 - деление на 0...

Добавлено через 37 минут
при значении a = 0
а никогда не будет равно 0 - это 100%.

Добавлено через 9 минут
аааа, ну да, спасибо! Действительно. Берем в приближении. (int b/int a)*100. Получается число < 0, соответственно оно округляется до 0 и умножается на 100 = 0. Именно поэтому ProgressBar сразу после изменения b уходит в 0 и ничего не показывает. Спасибо. Долго доходил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2013, 00:34
Помогаю со студенческими работами здесь

Progressbar в vba не работает
собссно сабж. написал код а он почему-то не работает. форма висит и не хочет сама закрываться, открывая другую. Dim NewHour As...

Не работает обнуление progressBar
Имеется прогресс бар на форме. Maximum = 50, Minimum = 0, Value = 0, Step = 10. Когда значение pBr &gt; Maximum, его значение...

Как работает ProgressBar?
ситуация такова. время выполнения макроса составляет около 6 минут. в это время желательно высветить progres bar (и, может, с...

Не работает ProgressBar в событии таймера
Что случилось я не знаю! Когда запускаю готовую программу, там все работает нормально, ПРЕКРАСНО! А когда копирую код и вставляю, то...

delphi не работает Smooth в ProgressBar
Здравствуйте. Столкнулся со следующей проблемой: поставил на ProgressBar Smooth = false, но он все-равно заливает сплошной линией....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru