Прогресс-бар и др. информация - работает

Обсуждение программы xStarter
Ответить
razzor
Пассажир
Сообщения: 2
Зарегистрирован: Пн ноя 15, 2010 11:04 pm
Благодарил (а): 0
Поблагодарили: 0

Прогресс-бар и др. информация - работает

Сообщение razzor » Ср июн 21, 2017 7:13 pm

Приветствую. Уже много лет плодотворно пользуюсь программой.
Сейчас потребовалось выводить информацию о том, что задача в настоящий момент делает. Ну и, как хотелка, - прогресс-бар.
В общем. Реализовал так. Задача время от времени записывает нужные данные в виде html-файла, в который вставлен скрипт самообновления. Две задачи сделаны специально (мне так надо было). Разумеется работает в xStarter и в виде скомпилированного exe'шника. Перед запуском надо править пути к файлу шаблона и html в задаче Progress_bar . Период обновления - в строке 8 файла progress_bar.txt (сейчас 1000 = 1 сек.).
В приложении сами две задачи, шаблон html-файла и сам файл.
ProgressBar.rar
(3.71 КБ) 329 скачиваний

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Прогресс-бар и др. информация - работает

Сообщение SergeK » Ср май 17, 2023 5:38 pm

Доброго времени суток!

В одной из своих задач мне потребовалось отображать состояние длительного по времени процесса. Для его визуализации нагляднее всего использовать прогресс-бар.
Знаю, что многие пользователи xStarter ждут от его автора реализации такого функционала, но понимаю, что это не так просто, как кажется.
Поэтому решил реализовать прогресс-бар своими силами.
Идея реализации прогресс-бара от razzor, представленная в данной теме, мне понравилась. Однако мне не нравится идея хранить разные служебные файлы отдельно от задачи, ведь их можно сформировать самой задачей.
В итоге получил свой вариант прогресс-бара в браузере.
Здесь использована идея от razzor, но реализованная чуть по-другому: немного изменён скрипт самообновления, визуализация прогресс-бара обеспечивается с помощью CSS-стилей веб-страницы, а шаблон самой страницы хранится внутри задачи, поэтому никакие внешние файлы не требуются.
Вложения
Прогресс-бар в браузере 1.xstk
(19.83 КБ) 49 скачиваний

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Прогресс-бар и др. информация - работает

Сообщение SergeK » Ср май 17, 2023 5:38 pm

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

Попробовал изменить код так, чтобы минимизировать ошибки, заменив действие "Записать в лог-файл" двумя действиями "WriteIniValue", передающими нужные параметры для прогресс-бара из задачи. Из-за специфики указанных действий потребовалось доработать код веб-страницы.
В этом варианте ошибки не исчезли, но их количество уменьшилось. Вариант работает только в современных браузерах, поддерживающих CSS-переменные.
Вложения
Прогресс-бар в браузере 2.xstk
(17.9 КБ) 49 скачиваний

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Прогресс-бар и др. информация - работает

Сообщение SergeK » Ср май 17, 2023 5:40 pm

В рассмотренных задачах меня стала смущать асинхронность работы прогресс-бара: он обновляется строго через заданный интервал времени независимо от того, что происходит в самой задаче. Попробовал изменить 1-й вариант задачи так, чтобы задача сама обновляла прогресс-бар в нужный ей момент. Для этого убрал из шаблона веб-страницы скрипт самообновления и возложил задачу обновления веб страницы на саму задачу (по клавише F5)
В таком варианте ошибки доступа к файлу исключены, а отображение прогресса какого-либо действия происходит более корректно.
Однако имеется существенный недостаток: прогресс-бар в браузере принимает фокус на себя и не отдаёт его до окончания процесса, так что использовать другие приложения на компьютере в это время невозможно.
Вложения
Прогресс-бар в браузере 3.xstk
(20.24 КБ) 49 скачиваний

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Прогресс-бар и др. информация - работает

Сообщение SergeK » Ср май 17, 2023 5:40 pm

Т.к. вышеприведённые варианты прогресс-бара реализованы в браузере, то после завершения процесса необходимо закрыть вкладку с прогресс-баром и браузер.
Если открыта одна вкладка, то по Ctrl+F4 закроется и вкладка, и браузер.
Если есть другие вкладки, то кроме закрытия вкладки прогресс-бара требуется послать Alt+F4 в окно браузера для его закрытия.

Свои задачи я стараюсь делать универсальными, без привязки к конкретному ПО (за исключением стандартного из поставки Windows), поэтому попытался сделать и свои реализации прогресс-бара независимыми от используемого браузера.
Заголовок вкладки с прогресс-баром в разных браузерах выглядит так:
Progress bar — Яндекс Браузер
Progress bar и еще 1 страница — Профиль 1: Microsoft Edge
Progress bar - Google Chrome
Progress bar - Internet Explorer

В других браузерах свои задачи я не тестировал, поэтому возможно, что у кого-то они не будут завершаться корректно, оставляя открытым окно браузера.

Для обращения к окну со вкладкой прогресс-бара достаточно использовать маску "Progress bar*".
Для идентификации окна браузера после закрытия вкладки прогресс-бара необходимо использовать другую маску, потому что заголовок будет содержать какое-то имя оставшейся открытой вкладки.
Простой замене строки "Progress bar" на маску "*" препятствует Microsoft Edge, который в заголовке сообщает о количестве страниц.
Исходя из этого необходимо извлечь часть строки заголовка, начинающуюся с тире. Кроме того, разные браузеры используют либо длинное, либо короткое тире.
В представленных примерах реализована попытка учесть всё вышесказанное для обеспечения универсальности.

Все приведённые варианты прогресс-бара рабочие, но каждый из них обладает как своими достоинствами, так и недостатками, что ограничивает сферу их применения.

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Прогресс-бар и др. информация - работает

Сообщение SergeK » Ср май 17, 2023 5:41 pm

Ввиду того, что современные браузеры очень неохотно дают возможность отключить "лишние" элементы своего окна, о также изменить его размер, а также в связи с тем, что браузеры довольно прожорливые в отношении памяти, попробовал реализовать прогресс-бар в "Блокноте" :).
Данный прогресс-бар реализован на базе третьего варианта прогресс-бара, представленного выше, т.к. самообновления в "Блокноте", естественно, нет. В этом варианте имеется тот же существенный недостаток: "Блокнот" принимает фокус на себя до окончания процесса.
Задача позволяет задать размер и заголовок окна процесс-бара, а также шаг изменения процентов. Т.к. заголовком окна по факту является имя врЕменного файла, при его указании необходимо учитывать ограничения для имён файлов Windows. Например, нельзя использовать символы /, \, :, *, ?, ", <, >, |.
Также реализовано автоматическое размещение окна с прогресс-баром в центре экрана.
Вложения
Прогресс-бар в Блокноте.xstk
(30.33 КБ) 45 скачиваний

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Прогресс-бар и др. информация - работает

Сообщение SergeK » Ср май 17, 2023 5:42 pm

В качестве примера реализовал задачу копирования файлов с прогресс-баром на основе "Блокнота".
В данной демонстрационной задаче отсутствуют дополнительные проверки на корректность исходных данных.
Несмотря на то, что в задаче используется действие копирования с запретом перезаписи существующих файлов, необходимо внимательнее подходить к выбору исходных файлов и результирующей папки для копирования во избежание возможной потери важных данных! Прервать уже запущенный процесс копирования не представляется возможным!
Самый безопасный вариант - это создать 2 произвольные папки специально для тестирования задачи. Оду из них необходимо наполнить копиями любых файлов, которые будут использоваться как источник для копирования. Вторая папка будет играть роль папки назначения.
Вложения
Копирование файлов с прогресс-баром.xstk
(35.82 КБ) 51 скачивание

kain151
Ас
Сообщения: 307
Зарегистрирован: Ср июн 24, 2009 4:12 am
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: Прогресс-бар и др. информация - работает

Сообщение kain151 » Чт май 18, 2023 5:44 pm

Добрый день.

У Вас в цикле While есть выражение [Rounding1.Result]. Не могу сообразить, это что, результат какого действия?

SergeK
Пилотируем с автопилотом
Сообщения: 22
Зарегистрирован: Чт янв 26, 2023 8:40 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Прогресс-бар и др. информация - работает

Сообщение SergeK » Пт май 19, 2023 5:24 pm

Здравствуйте!
kain151 писал(а):
Чт май 18, 2023 5:44 pm
У Вас в цикле While есть выражение [Rounding1.Result]. Не могу сообразить, это что, результат какого действия?
Это результат округления.
У меня в коде есть расчёт позиции для отображения значения процентов (посередине процесс-бара), которая не всегда оказывается целочисленной, поэтому я её округляю.
Кроме того, сами проценты тоже отображаются в целом виде, хотя их расчётные значение и шаг изменения, как правило, нецелочисленные (зависят от числа копируемых файлов). Поэтому я их также округляю.
Вообще в данном примере я несколько упростил себе задачу расчёта прогресс-бара, взяв в качестве 100% ровно 100 символов, иначе математики было бы больше :).

Ответить