FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9112
Вход
Нестандартный прогрессбар

Этот активИкс нужен только для нестандартных подходов, я имею ввиду, когда в обычный прогресс бар нельзя загнать промежуточные данные, а пользователю надо показать что машина двигается.


 
Прислал: Aries   Категория: Интерфейс


Нестандартный прогрессбар

Однажды, мне надо было, в программе, написать довольно большую
выборку данных, порядка 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-ку не надо)

 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.924) Вложение [94.13]kb
Дополнения пользователей
Нестандартный прогрессбар
[+][?]
Перминов Игорь
17.12.03 12:46:18

Как проверить, а зарегистрирован ли данный активХ?
Admin note RE:
Можно так http://www.foxclub.ru/sol/index.php?act=view&id=57
Mitchman
18.12.03 16:46:07

Ответ от Aries
запустить мою формочку и посмотреть, так же если стоит 6-я студия там есть какаято програмулина,
где тоже можна посмотреть
dato
18.04.06 19:01:05

AктивИкс просто прекрасный.
А что обновилось 11.04.06-го?
Спасибо.
Aries
19.04.06 09:00:45

To Dato
Была ошибка в описании, а сам активикс не изменился
AlexSSS
24.08.06 13:31:29

Спасибо за идею, все получается очень просто. Уже появилось желание сделать подобный класс с
выводом таймера на экран

из недостатков метода отмечу то, что ActiveX надо решистрировать под локальным админом. Но, боюсь,
это уже не обойти.

> Была ошибка в описании
нашел еще одну!
readm[B]y[/B].doc
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика