Несмотря на кажущуюся "громоздкость" программа работает исключительно быстро. Это достигается тем, что "медленная" процедура вывода на экран производиться не на каждом шаге, а на определенном, рассчитываемом при каждом выводе.
При неизвестном полном количестве шагов вывод производиться не менее чем через 1 секунду от прошлого вывода - на каждом шаге сравнивается ТекущееВремя() с рассчитанным. Данный подход позволяет не задавать индикатору , через какое количество шагов производить вывод.
Индикатор можно использовать для вывода сообщения - глИндикатор(СтрСообщения).
Индикатор прост в обращении - в ходе Процесса достаточно передавать только номер шага, или номер шага и, вторым параметром, Новый Заголовок (любое количество раз), если необходимо изменить Заголовок Индикатора.
Если в Форме предусмотрено текстовое поле "ПолеТекстИндикатор" - индикатор выводится в это поле; иначе - в строку "Состояние".
Возможны 3 режима вызова:
1. Если Парам1 не является числом - значит в переменной Парам1 передается заглавие линейки Индикатора, а в переменной Парам2 передается заранее вычисленное полное количество каких-либо действий (операций, шагов) процесса, отображаемого индикатором.
В таком режиме процедура вызывается один раз перед началом процесса. Если количество шагов неизвестно - режим необязательный.
В переменную "Конт" передается контекст текущей формы (для случая, когда индикатор расположен в глобальном модуле и в форме определено поле для вывода индикатора - "ПолеТекстИндикатор").
2. В переменную "Парам1" передается текущее количество шагов отображаемого процесса (>0), а в переменную "Парам2" можно передавать текущий заголовок Индикатора. В таком режиме процедура вызывается на каждом шаге процесса
3. Вызов без параметров ("глИндикатор()") - очистка поля (или строки "Состояние()" и всех сопутствующих переменных.
Для работы Индикатора необходимо задать переменные:
Перем ИндикаторЗагл; //Экспорт
Перем ИндикаторПолнКолич; //Экспорт
Перем ИндикаторВремяНач; //Экспорт
Перем ИндикаторТекКолич; //Экспорт
Перем ИндикаторКонтекст; //Экспорт //Нужна, если Индикатор расположен в глобальном модуле и в форме предусмотрено поле "ПолеТекстИндикатор";
Индикатор можно "как есть" вместе с назначением переменных переписывать в глобальный модуль - будет работать.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
В данной демонстрационной обработке для сравнения скорости работы использовались мои функции времени
(//infostart.ru/public/128790/). Также использовались два Прогресс-Индикатора от ded00786 (//infostart.ru/public/15740/).
Думаю, авторских прав не нарушил, так как в текст обработок не вносил изменений, кроме фиксации времени начала и завершения.
Есть ссылка на данные обработки. Автор, прошу пардону! У Вас почти все есть для многократного возрастания скорости.
Небольшие изменения программ...
Сами посмотрите? Или уже неинтересно?..