powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Алгоритм progress bar
11 сообщений из 11, страница 1 из 1
Алгоритм progress bar
    #39535770
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На форму добавил progressbar microsoft, кнопка по которой запускается подпрограмма, (Считывание из текстового файла(100 мб) в таблицу, действия с таблицей, разные проверки, индексации, сжатие и т.д.), как теперь заставить этот progressbar двигаться? Надо ли для этого установить таймер или есть другие варианты?
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39535771
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давно им не пользуюсь, если не путаю там свойство есть "текущее значение", его меняешь - он двигается. Вроде мин/макс можно задать.

С ним, как и с любыми внешними контролами, есть проблема: их может не оказаться на компе у пользователя и форма не откроется.
Поэтому написал свой прогрессбар и им пользуюсь.
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39535786
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, есть там progressbar.value, min и max,(и refresh, каждый раз наверное обновлять, при изменении значения).. Но чему этот value приравнивать, Т.е. если есть например таблица из 7856 и т.д. записей, через какой интервал записей задавать это значение и делать рефреш.. или можно таймер как-то установить, прошло сколько-то секунд, обновить этот контрол..
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39535795
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refresh() не надо, само перерисуется.

value должно быть в диапазоне min ... max, там вроде есть еще ограничение по max 32767 если не путаю.

Как вариант установить min = 0, max = 100, а value высчитывать например так
Код: sql
1.
progressbar.value = recno() / reccount() * 100


постоянно вызывать это не стоит, т.к. тормозить будет если много вызовов сделать. Да и смысла нет при незначительном изменении - визуально все-равно ничего не поменяется.

Никакие таймеры не нужны, да и не будут они срабатывать если расчет идет. Достаточно какого-нибудь счетчика.
Например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
lnCnt = 0
sele MyTable 
scan
    if lnCnt <= 0
       progressbar.value = recno() / reccount() * 100
       lnCnt = round(reccount() / 50, 0)
    endif
    lnCnt = lnCnt - 1
    ...
endscan
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39535801
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае можно такую конструкцию применить
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
lnCnt = 0 && Текущее значение
lnMax = ... && Максимум
lnStep = lnMax / 50 && Шаг изменения PB
lnNext = 0 && Значение следующего изменения

...

*Проверка и изменение
lnCnt = lnCnt + 1
if lnCnt > lnNext
   progressbar.value = lnCnt / lnMax * 100
   lnNext = lnNext + lnStep 
endif
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39535833
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, это хорошо в случае перебора записей, когда ты знаешь сколько записей...Да, я напишу "идёт работа с таблицей" и активирую этот progressbar, но вначале у меня идёт добавление записей из текстового файла в таблицу, и очень долго(относительно), как я могу вычислять эти step, чтоб видеть что программа не повисла?
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39535853
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1 как я могу вычислять эти step, чтоб видеть что программа не повисла?Отталкиваясь от размера файла в байтах и прочитанных байтов.
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39535864
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С текстовым файлом можно поизвращаться: в lnMax взять размер файла, а lnCnt увеличивать на размер прочитанного, но будет проблема с переводами строк.

Можно просто вывести счетчик:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
lnCnt = 0 && Текущее значение
lnStep = 1000 && Шаг изменения PB
lnNext = 0 && Значение следующего изменения
...

lnCnt = lnCnt + 1
if lnCnt > lnNext 
   wait 'Загрузка из файла. Загружено ' + str(lnCnt) + ' строк ...' window nowait
   lnNext = lnNext + lnStep 
endif

...
wait clear


lnStep подобрать чтобы раз в 1-2 секунды обновлялось
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39535874
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39542562
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
q1w1e1,
Если процесс долгий тогда ко всему еще и прогресс бар наложит свое время..
...
Рейтинг: 0 / 0
Алгоритм progress bar
    #39542574
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valeriiq1w1e1,
Если процесс долгий тогда ко всему еще и прогресс бар наложит свое время..
Не наложит если тупо не вызывать его после каждого прохода цикла, а ограничится 50-100 вызовами за весь расчет.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Алгоритм progress bar
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]