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

ProgressBar не работает

28.07.2013, 22:29. Показов 2353. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru