powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запустить код на выполнение?!
12 сообщений из 37, страница 2 из 2
Запустить код на выполнение?!
    #37738537
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во вложении пример класс progress bar. За основу взят класс Михаила Дунькина по этой ссылке http://www.foxclub.ru/sol/solution20.php с мелкими изменениями

Использовать в приложении можно так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
LOCAL lnTotal
lnTotal = reccount('MyTable')

SET CLASSLIB TO thermBar ADDITIVE
LOCAL loProgressBar
loProgressBar=CREATEOBJECT('tbrProg','Заполнение списка','Всего ' + ltrim(str(m.lnTotal)) + ' элементов', m.lnTotal)

LOCAL lnSeconds, lnI
lnI=0
lnSeconds=Seconds()
select MyTable
SCAN NOOPTIMIZE
	IF Seconds()-m.lnSeconds > 2
		loProgressBar.Visible=.T.
	   	loProgressBar.Update(recno(m.tcTable))
	ENDIF

	lnI=m.lnI+1
ENDSCAN



Здесь основная идея в том, что Progress Bar физически размещается в объекте ToolBar, как следствие, не требует отдельной формы и не может получить фокуса.

В качестве примера исполльзования здесь выбрано сканирование всех записей некоторой таблицы MyTable.
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37738847
Aleks_AleksЕще такой момент, может кто подскажет.
Есть программа, она считает, отображает, записывает и т.д. И когда она считает, занимает много времени. Для того чтобы пользователь видел что программа еще работает я вставил сообщение:
Код: sql
1.
2.
WAIT WINDOW "Идёт отбор данных... Ждите..." NOWAIT NOCLEAR AT SROWS()/2, SCOLS()/2
WAIT CLEAR


Но оно по словам начальника не информативно и не дает пользователю уверенности что программа еще работает!
Я вставил несколько таких сообщений с названиями отображающими этап работы программы, но в место пяти вставленных сообщений отображаются только два.
Можно что ни будь сделать, что бы, видеть, что программа еще работает?
Чем больше строчек в программе тем дольше будет выполняться код.

*Ты был на верном пути
WAIT 'Обработка'+CHR(13)+PADR[REPLICATE('.',RECNO()/RECCOUNT()*240),240,' '] WINDOW NOWAIT
*RECNO() это номер обрабатываемой записи в таблице

*Если записей в базе десятки и сотни тысяч тогда нет смысла на каждую запись выводить термометр
IF RECNO()%100=0 OR RECNO()=RECCOUNT()
WAIT 'Обработка'+CHR(13)+PADR[REPLICATE('.',RECNO()/RECCOUNT()*240),240,' '] WINDOW NOWAIT
ENDIF
*В данном примере мы двигаем термометр если остаток от деления на 100 равен 0,т.е. на каждую сотую запись двигаем термометр
*и на последок выводим термометр когда RECNO()=RECCOUNT()
*ПРИМЕЧАНИЕ - сортировка по индексу SET ORDER должна быть выключена для этой таблицы
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37738856
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Я что-то совсем запутался.
Столько разных вариантов и у меня ни чего не получается.
Вот сделал (попытался сделать) небольшой пример как оно должно работать, но оно работает ни так.
Если у кого еще остались нервы и время, помогите!
Нужно немножко подкорректировать формы. Они в архиве в месте с БД.
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37738872
Aleks_AleksВладимирМ,

Я что-то совсем запутался.
Столько разных вариантов и у меня ни чего не получается.
Вот сделал (попытался сделать) небольшой пример как оно должно работать, но оно работает ни так.
Если у кого еще остались нервы и время, помогите!
Нужно немножко подкорректировать формы. Они в архиве в месте с БД.
Мой вариант самый простой и быстрый, почти как твой.
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37738885
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,

Вот-вот, я это и хотел написать, ни каких классов, ни каких форм, и ни каких параметров!
Скорее всего его буду и использовать.
Сейчас попробую.
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37738913
Aleks_Aleksпроходящий.,

Вот-вот, я это и хотел написать, ни каких классов, ни каких форм, и ни каких параметров!
Скорее всего его буду и использовать.
Сейчас попробую.
Чем больше красоты и наворотов - тем больше тормозов при большом количестве записей.
В команде WAIT можешь ещё добавить параметр AT ... чтобы окошко wait выводилось в центре экрана.
Ещё маленькое примечание - в команде wait количество знаков-символов для вывода ограничено.
Я поставил - 'Обработка',CHR(13) и 240 знаков под термометр.
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37739102
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,

Даже и не знаю, может я не правильно поставил сообщение но при выполнении программы отображается только:
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37739178
Aleks_Aleksпроходящий.,

Даже и не знаю, может я не правильно поставил сообщение но при выполнении программы отображается только:
Сколько записей в базе?
Этот код надо ведь в теле какого то цикла выполнять?
Например
SCAN
*тут термометр
ENDSCAN
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37739739
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,

Работает.
А что если попробовать рисовать градусник, по количеству строчек кода?
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37739805
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
WAIT WINDOW 'Обработка '+STR(nZap)+" %"+CHR(13)+PADR[REPLICATE('|',INT(RECNO()*100/RECCOUNT())),100,' '] NOWAIT NOCLEAR AT SROWS(), SCOLS()/1000
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37740007
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,
Сделал как ты и говорил.
Проставил по коду сообщения:
Код: sql
1.
2.
WAIT WINDOW 'Обработка '+STR(20)+" %"+CHR(13)+PADR[REPLICATE('|',20),100,' '] NOWAIT NOCLEAR AT SROWS()/2, SCOLS()/2
Inkey(1.0) && задержка 

А где код быстро выполняется, небольшую задержку для наглядности.
Всем огромное спасибо за помощь!
...
Рейтинг: 0 / 0
Запустить код на выполнение?!
    #37742332
Aleks_Aleks,

Главное принцип ты понял, остальное по вкусу.
По поводу интерфейса могу добавить только одно - делай поменьше чёрточек.
Чем меньше на экране рамок и чёрточек - тем лучше восприятие текстовой информации.
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запустить код на выполнение?!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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