Нестандартный прогрессбар
Однажды, мне надо было, в программе, написать довольно большую
выборку данных, порядка 6 селектов, идущих один за другим,
далее сканирование по нескольким таблицам и снова парочка селектов.
Это все дело затягивалось на минут эдак от 5-8. Возник вопрос,
как показать пользователю, что машина работает, а не висит.
Команды SET TALK ON и прочее не подходило, так как мне нужен был
общий прогресс бар, показывающий начало работы и конец,
а стандартный прогресс бар не подходил, так как я не мог вычислить
время начала и время конца операции. Да и вообще получить какие ни будь промежуточные данные.
Я попытался решить проблему разными путями, но дело в том,
что Фокс работает в одном потоке, и при выборке, индексации,
он просто забирает все на себя. При этом все остальные процессы замирают,
ждут, когда закончится основной процесс.
Что бы это обойти я создал новый проект. В котором создал класс формы,
в свойствах которого выставил OLE Public. Скомпилировал в EXE файл,
в DDL-ку нельзя иначе он будет работать в том же потоке что и основная программа,
а значит, просто умрет.
Теперь как это все работает
Перво-наперво надо зарегистрировать активИкс.
Для этого надо дать такую команду:
Progressbar.exe /regserver
И все!
Теперь как это дело запустить:
Допустим, есть форма в ней есть пропети oWin
THISFORM.oWin=CreateObject("MyProgres.oCat") &&В данном случае будет ходить кот (тоже прикольно)
*THISFORM.oWin=CreateObject("MyProgres.oPrg") &&в данном случае будет обычный прогресс бар
THISFORM.oWin.Start("Идет формирование...")
***
здесь могут идти ваши выборки, циклы итд
***
THISFORM.oWin.Stop("Формирование окончено!")
Этот активИкс нужен только для нестандартных подходов, я имею ввиду,
когда в обычный прогресс бар нельзя загнать промежуточные данные,
а пользователю надо показать что машина двигается.
В проекте есть форма Form1, запустите ее и нажмите кнопку операции,
увидите, как это все работает. Только не забудьте, все таки перво-наперво
зарегистрировать активИкс, как описано выше.
Замечу что этот прогресс бар нужен только для нестандартного
показателя выполнения, в остальных случаях рекомендуется
пользоваться стандартными способоми.
Это дело написано на 8 Фоксе. Работает на 6-ке и 8-ке.
(перекомпилировать под 8-ку не надо)
Вложенные файлы
# |
Название |
Тип файла |
Размер |
---|---|---|---|
1 | 357progress | .zip | 94,13 КБ |