|
29.09.2020, 21:22 | #1 |
Участник
|
DAX09: некорректное отображение полоски ProgressBar
Привет.
Вроде ничего сложного но не могу разобратся, почему у меня некорректно отображается полоска прогресс бара в методе run классе наследнике RunBase. Начальные значения: strTo = 1, strFrom = 4. Т.е. 4 итерации, все просто. Соответственно и полоска прогресс бара для 1 итерации должна нанимать 25%, для 2 - 50%, 3 - 75%, 4 - 100%. Но почему так некорректно отображается? Что даже итерацию 4 - не показывает. Приложил скриншеты. X++: public void run() { ... Counter curRow, countRows, numRows; ... void progressUpdate(Counter _curr, Counter _num) { real percent = decRound((_curr / _num) * 100, 2); ; progress.incCount(); progress.setText(strfmt("%1 из %2 (%3)", _curr, _num, strFmt("%1%", percent))); } ; ... numRows = strTo - strFrom + 1; progress = new RunbaseProgress(); progress.setCaption("Импорт"); progress.setAnimation(#AviUpdate); progress.setTotal(numRows); startLengthyOperation(); ... for (curRow = strFrom; curRow <= strTo; curRow++) { countRows++; progressUpdate(countRows, numRows); ... } ... endLengthyOperation(); ... } Последний раз редактировалось oleggy; 29.09.2020 в 21:25. |
|
29.09.2020, 22:11 | #2 |
Administrator
|
Ответ-то вроде лежит на поверхности. Судя по индикатору (если не исследовать внутренности кода) - внутренний счетчик прогресс-бара начинается с 1 (а если полезть изучать код, то это можно будет увидеть). И первый вызов progress.incCount() увеличивает его до 2 (а это 50% из 4-х).
Поменяйте местами progress.setText и progress.incCount() - и получите желаемое. Можно еще будет между ними поставить (чисто для целей отладки) явный вызов progress.update(true) для перерисовки формы на экране, хотя в общем-то он и так вызывается из каждого метода
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 29.09.2020 в 22:14. |
|
01.10.2020, 14:02 | #3 |
Участник
|
|
|
02.10.2020, 12:45 | #4 |
Administrator
|
Судя по скриншотам - это так. И поэтому собственно "зависание" на 100%-ах
__________________
Возможно сделать все. Вопрос времени |
|
02.10.2020, 12:56 | #5 |
Участник
|
Цитата:
Я открыл код которых мильён с прогрессом. И там все норм - с ноля начинается. Тотал - 4, и значит надо 4 итерации чтобы заполнить прогресс. А что случилось у автора темы не понятно.. толи он нам чего-то не договаривает между точек толи... Ну можем сойтись на том, у него то как раз RunbaseProgress начинается с единицы.. кастомизация) Последний раз редактировалось Perc; 02.10.2020 в 12:59. |
|
02.10.2020, 14:42 | #6 |
Участник
|
У вас проблемы с доверием.
По поводу скриншетов - они абсолютно достоверны. То что я указал точки (...) не для того что бы что то скрыть - там был код который абсолютно не относится и затрудняет восприятие проблемы. У меня 4 итерации. Начиная с 1 по 4 включительно. Нумерация в цикле с 1 по 4 включительно. Я же код не зря предьявил. Вопрос почему на первой итерации уже было 50% прогресса? Последний раз редактировалось oleggy; 02.10.2020 в 14:47. |
|
02.10.2020, 23:26 | #7 |
Administrator
|
Спасибо за подробное разъяснения! Почерпнул для себя много интересного
__________________
Возможно сделать все. Вопрос времени |
|