:: Visual Foxpro, Foxpro for DOS
Индикатор хода работы
Леокади

Сообщений: 89
Дата регистрации: 27.06.2005
Прошу прощения, если эта тема уже была. Я воспользовалась поиском, но не нашла.

Поделитесь пожалуйста опытом создания индикатора хода работы

Спасибо
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
comsel

Сообщений: 947
Откуда: Москва
Дата регистрации: 20.09.2007
В решениях поищи, по-моему там всякого-разного полно.

PS. Надеюсь, не для SELECT
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
Vitibon

Сообщений: 627
Откуда: Новосибирская
Дата регистрации: 08.03.2006
Или скачай один из русских хелпов с форума, forum.foxclub.ru, или поиском по dv_foxhelp_AS. Там в каком-то есть Материалы Базы Знаний Microsoft VFP, может устроит.


------------------




Исправлено 2 раз(а). Последнее : Vitibon, 16.12.13 11:06
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Называется это Progress Bar.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
DO FORM HOME(2) + "solution\ffc\therm.scx"


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
glaz58

Сообщений: 812
Откуда: Воронеж
Дата регистрации: 09.02.2008
А как к этому термометру прикрутить ход работы, например перебор строк таблицы командой
Scan...Endscan
?
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
sphinx

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
WAIT внутри цикла - это не то? Сам пользую. Или другая задача? Как прочитал - так и предложил.

Если именно термометр - берется обычный, ему на вход надо подать число. В скане высчитал и подал. Я кратко, как Таран. Нмли подробнее - то тогда проще репро-код. И лучше, если дают свой, чтоб лисапед не писать.


------------------
"Veni, vidi, vici!"(с)




Исправлено 1 раз(а). Последнее : sphinx, 25.02.23 21:15
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
sphinx

Сообщений: 31166
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Сорри, невнимателен. К ЭТОМУ. Тогда советы снял. Надо посмотреть. Без фокса не скажу.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
_vit

Сообщений: 5173
Дата регистрации: 29.07.2002
glaz58
А как к этому термометру прикрутить ход работы, например перебор строк таблицы командой
Scan...Endscan
?

Не к термометру прикручивают перебор строк таблицы
а перебору строк таблицы прикручивают термометр.

В цикле Scan...Endscan периодически вызывать метод Update термометра.
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
glaz58
А как к этому термометру прикрутить ход работы, например перебор строк таблицы командой
Scan...Endscan
?

Идея простая:
- надо ЗАРАНЕЕ знать число оборотов (сделать COUNT, посчитать все обороты N)
- на каждом обороте вызывать этот термометр, который будет: а) инкрементировать счетчик оборотов n, б) высвечивать термометр n/N
- по окончании оборотов погасить термометр

Итого потребуются всего 3 вызова одной программы - назовем ее условно "Прогрессор".
Удобно совместить вызов "2" с анализом кнопки ESC, на предмет выхода из оборотов
Практично не каждый оборот вызывать видеоэлемент изображения n/N, потому что если предвидится много оборотов N, то видеодела займут проц. время
Удобно показывать примерное время ожидания вместе с "термометром", данные для этого есть - n, N, DATETIME()
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
_vit

Сообщений: 5173
Дата регистрации: 29.07.2002
of63
- на каждом обороте вызывать этот термометр, который будет: а) инкрементировать счетчик оборотов n, б) высвечивать термометр n/N
Практично не каждый оборот вызывать видеоэлемент изображения n/N, потому что если предвидится много оборотов N, то видеодела займут проц. время

Да, может быть и так что анимация термометра займет больше времени чем проводимая в цикле работа.
Если скажем 100500 оборотов то разумно будет поделить это на 100
и обновлять термометр только каждые 1005 оборотов.



Исправлено 1 раз(а). Последнее : _vit, 26.02.23 20:38
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Все равно будешь получать управление каждый оборот, так минимизируй его!
Все равно на каждом обороте придется вызвать DATATIME() - надеюсь, быстрая ф-ия
Также - обратиться к переменным n и N (текущий счетчик и его предел) - придется сделать их глобальными (ну, тут как вам фантазия подскажет, куда из припрятать , чтобы фуннкция из любого глубого вложенного метода могла из видеть, изображая "термометр"

Если не прошла 1 сек, например, то не надо перевысвечивать... и т.п. Если предложенная механика нравится, то реализуйте, и сами доработаете.
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
_vit

Сообщений: 5173
Дата регистрации: 29.07.2002
of63
Все равно на каждом обороте придется вызвать DATATIME() - надеюсь, быстрая ф-ия

Зачем?

of63
n и N (текущий счетчик и его предел) - придется сделать их глобальными

Тоже не понял зачем.
N вообще можно задать при инициализации термометра и он будет его помнить у него есть такое свойство.
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
_vit
N вообще можно задать при инициализации термометра и он будет его помнить у него есть такое свойство.
Блин, народ, вы где такой травы забористой набрались? Какие еще Datetime()? Какие еще глобальные переменные? Градусник показывает значение одного из параметров своего метода update() и ему абсолютно по барабану ваши времена, процессы и прочая мура. Он не средство управления, он всего лишь средство визуализации некоей величины, которую его попросили показать в виде цветной полоски соответствующей этой величине длиной.

------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 26.02.23 23:11
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Серега, мы с этого и начали... Ну тогда они твои

() "и он будет его помнить" - банальная потребность, ... )



Исправлено 1 раз(а). Последнее : of63, 27.02.23 00:01
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
А cпойлера, что, нет?
FUNCTION Thermo
LPARA lnThermoCounter,pMess1,pMess2,pMess3, tlType
*: При первом вызове m.lnThermoCounter=-1
*: В цикле m.lnThermoCounter должен быть между 0 и 100
*: Чтобы закончить процесс m.lnThermoCounter>100
*: Пример:
*: do thermo with -1,"aa","bb"
*: for i=10 to 100 step 10
*: do thermo with i,"aa","bb"
*: next
*: do thermo with 101,"aa","bb"
m.tlType = EVL(m.tlType,0)
LOCAL lcTitle, ll, lnSelect
PUBLIC goTherm
m.lnThermoCounter=EVL(m.lnThermoCounter,0)
IF m.lnThermoCounter > 100
IF TYPE("m.goTherm.name") = "C"
goTherm.RELEASE
m.goTherm=0
ENDIF
RETU .F.
ENDIF
m.lnSelect = SELECT()
IF m.lnThermoCounter<0 OR TYPE("goTherm.name") # "C"
IF WEXIST('thermometer')
RELEASE WINDOWS thermometer
m.goTherm = 0
ENDIF
m.lcTitle=EVL(m.pMess1,"")
DOEVENTS FORCE
IF m.lnThermoCounter<0 OR TYPE('m.goTherm.Name') # 'C'
DO CASE
CASE m.tlType = 0
m.ll=EMPTY(m.pMess3) OR TYPE('ggIconView')#'N' OR ggIconView#1
m.goTherm = CREATEOBJECT(IIF(m.ll,"Thermometer","Thermometer1"), IIF(m.lnThermoCounter<0,m.lcTitle,pMess2 ))
CASE m.tlType = 1
m.goTherm = CREATEOBJECT("Thermometer",m.lcTitle)
CASE m.tlType=2
m.goTherm = CREATEOBJECT("Thermometer1",m.lcTitle)
ENDCASE
* =Transparent(m.goTherm)
ENDIF
m.goTherm.VISIBLE = .T.
m.goTherm.UPDATE(MAX(0,EVL(m.lnThermoCounter,0)),EVL(m.pMess2,''))
m.goTherm.HIDDEN.SETFOCUS
SELECT(m.lnSelect)
RETU .T.
ENDIF
IF NOT EMPTY(m.pMess1) && AND TYPE("goTherm.Name")="C"
m.goTherm.SetTitle(m.pMess1)
ENDIF
m.goTherm.UPDATE(m.lnThermoCounter, EVL(m.pMess2, ''))
m.goTherm.lblPercentage.REFRESH
RETURN



Исправлено 1 раз(а). Последнее : Joys, 27.02.23 11:14
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
С некоторых пор отказался от "термометров" у себя - то что боль-мене быстро (до 1-2 мин) - там он только мешать будет, а то что дольше - там как правило ХП в базе - к ним термометр не прикрутишь.

Пересмотрите свою логику/интерфейс, может случиться что данная визуализация вам и не нужна вовсе))
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
_vit

Сообщений: 5173
Дата регистрации: 29.07.2002
ssa
Блин, народ, вы где такой травы забористой набрались? Какие еще Datetime()? Какие еще глобальные переменные?

Это ты не по адресу обратился.

Я вот об этом Оффе (найдите 3 отличия ), а ты о чем?

Local loTherm, loTherm2, lcTask, lnPercent, lnCount
lnCount = 100500
* Way 1
loTherm = Newobject("_thermometer", Home() + "ffc\_therm", "", "Title")
With loTherm
.Show()
For i = 1 To lnCount
lnPercent = i / lnCount * 100
.Update(lnPercent, "Count: " + Trans(i))
Endfor
.Complete()
Endwith
* Way 2
loTherm2 = Newobject("_thermometer", Home() + "ffc\_therm", "", "Title", lnCount)
With loTherm2
.Show()
For i = 1 To lnCount
.Update(i, "Count: " + Trans(i))
Endfor
.Complete()
Endwith



Исправлено 1 раз(а). Последнее : _vit, 27.02.23 23:58
Ratings: 0 negative/0 positive
Re: Индикатор хода работы
of63
Автор

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Я нашел только одну ненужную строку в Вей1 и Вей2 - "lnPercent = i / lnCount * 100"
В чем прикол вопроса?...

DATATIME() нужна, чтобы написать примерное время ожидания сбоку от термометра...
() Как с Луной разговариваю...

Доб. Аа, "штатный" термометр фокса заряжается кол-вом оборотов.
Почему-то (потому-что заморочно, неудобно, громоздко) не использую этот штатный термометр. Написал свой. Да, он тоже "запряжается" ожидаемым количеством оборотов, и на каждом обороте ожидает вызов (для декремента счетчика), тупее невозможно...


()... была мысль контролировать прогресс в фоксе процесса. Основываясь на некой подпрогрммности" фокса, на "таймере" фокса (и другие события вызываются/обрабатываются ПРОЦЕССОРОМ ФОКСА при выполнения текущих строк программы фокса). Для этого есть глобальные переменные, очсталось организовать "ежесекундные (например) события" в фоксе. Потом забросил эту идею, потому что много важных вещей оказалось можно решить без извратов, и дело не в этом фоксе...



Исправлено 1 раз(а). Последнее : of63, 28.02.23 21:01
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 16 (Гостей: 16)

© 2000-2024 Fox Club 
Яндекс.Метрика