Прогресс-бар и др. информация - работает
-
- Пассажир
- Сообщения: 2
- Зарегистрирован: Пн ноя 15, 2010 11:04 pm
- Благодарил (а): 0
- Поблагодарили: 0
Прогресс-бар и др. информация - работает
Приветствую. Уже много лет плодотворно пользуюсь программой.
Сейчас потребовалось выводить информацию о том, что задача в настоящий момент делает. Ну и, как хотелка, - прогресс-бар.
В общем. Реализовал так. Задача время от времени записывает нужные данные в виде html-файла, в который вставлен скрипт самообновления. Две задачи сделаны специально (мне так надо было). Разумеется работает в xStarter и в виде скомпилированного exe'шника. Перед запуском надо править пути к файлу шаблона и html в задаче Progress_bar . Период обновления - в строке 8 файла progress_bar.txt (сейчас 1000 = 1 сек.).
В приложении сами две задачи, шаблон html-файла и сам файл.
Сейчас потребовалось выводить информацию о том, что задача в настоящий момент делает. Ну и, как хотелка, - прогресс-бар.
В общем. Реализовал так. Задача время от времени записывает нужные данные в виде html-файла, в который вставлен скрипт самообновления. Две задачи сделаны специально (мне так надо было). Разумеется работает в xStarter и в виде скомпилированного exe'шника. Перед запуском надо править пути к файлу шаблона и html в задаче Progress_bar . Период обновления - в строке 8 файла progress_bar.txt (сейчас 1000 = 1 сек.).
В приложении сами две задачи, шаблон html-файла и сам файл.
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Прогресс-бар и др. информация - работает
Доброго времени суток!
В одной из своих задач мне потребовалось отображать состояние длительного по времени процесса. Для его визуализации нагляднее всего использовать прогресс-бар.
Знаю, что многие пользователи xStarter ждут от его автора реализации такого функционала, но понимаю, что это не так просто, как кажется.
Поэтому решил реализовать прогресс-бар своими силами.
Идея реализации прогресс-бара от razzor, представленная в данной теме, мне понравилась. Однако мне не нравится идея хранить разные служебные файлы отдельно от задачи, ведь их можно сформировать самой задачей.
В итоге получил свой вариант прогресс-бара в браузере.
Здесь использована идея от razzor, но реализованная чуть по-другому: немного изменён скрипт самообновления, визуализация прогресс-бара обеспечивается с помощью CSS-стилей веб-страницы, а шаблон самой страницы хранится внутри задачи, поэтому никакие внешние файлы не требуются.
В одной из своих задач мне потребовалось отображать состояние длительного по времени процесса. Для его визуализации нагляднее всего использовать прогресс-бар.
Знаю, что многие пользователи xStarter ждут от его автора реализации такого функционала, но понимаю, что это не так просто, как кажется.
Поэтому решил реализовать прогресс-бар своими силами.
Идея реализации прогресс-бара от razzor, представленная в данной теме, мне понравилась. Однако мне не нравится идея хранить разные служебные файлы отдельно от задачи, ведь их можно сформировать самой задачей.
В итоге получил свой вариант прогресс-бара в браузере.
Здесь использована идея от razzor, но реализованная чуть по-другому: немного изменён скрипт самообновления, визуализация прогресс-бара обеспечивается с помощью CSS-стилей веб-страницы, а шаблон самой страницы хранится внутри задачи, поэтому никакие внешние файлы не требуются.
- Вложения
-
- Прогресс-бар в браузере 1.xstk
- (19.83 КБ) 49 скачиваний
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Прогресс-бар и др. информация - работает
Прогресс-бар прекрасно заработал, но в процессе его тестирования иногда (правда очень редко) стали происходить ошибки вида "Не удалось получить доступ к файлу", вызванные одновременной перезаписью задачей веб-страницы и её самообновлением в браузере.
Попробовал изменить код так, чтобы минимизировать ошибки, заменив действие "Записать в лог-файл" двумя действиями "WriteIniValue", передающими нужные параметры для прогресс-бара из задачи. Из-за специфики указанных действий потребовалось доработать код веб-страницы.
В этом варианте ошибки не исчезли, но их количество уменьшилось. Вариант работает только в современных браузерах, поддерживающих CSS-переменные.
Попробовал изменить код так, чтобы минимизировать ошибки, заменив действие "Записать в лог-файл" двумя действиями "WriteIniValue", передающими нужные параметры для прогресс-бара из задачи. Из-за специфики указанных действий потребовалось доработать код веб-страницы.
В этом варианте ошибки не исчезли, но их количество уменьшилось. Вариант работает только в современных браузерах, поддерживающих CSS-переменные.
- Вложения
-
- Прогресс-бар в браузере 2.xstk
- (17.9 КБ) 49 скачиваний
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Прогресс-бар и др. информация - работает
В рассмотренных задачах меня стала смущать асинхронность работы прогресс-бара: он обновляется строго через заданный интервал времени независимо от того, что происходит в самой задаче. Попробовал изменить 1-й вариант задачи так, чтобы задача сама обновляла прогресс-бар в нужный ей момент. Для этого убрал из шаблона веб-страницы скрипт самообновления и возложил задачу обновления веб страницы на саму задачу (по клавише F5)
В таком варианте ошибки доступа к файлу исключены, а отображение прогресса какого-либо действия происходит более корректно.
Однако имеется существенный недостаток: прогресс-бар в браузере принимает фокус на себя и не отдаёт его до окончания процесса, так что использовать другие приложения на компьютере в это время невозможно.
В таком варианте ошибки доступа к файлу исключены, а отображение прогресса какого-либо действия происходит более корректно.
Однако имеется существенный недостаток: прогресс-бар в браузере принимает фокус на себя и не отдаёт его до окончания процесса, так что использовать другие приложения на компьютере в это время невозможно.
- Вложения
-
- Прогресс-бар в браузере 3.xstk
- (20.24 КБ) 49 скачиваний
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Прогресс-бар и др. информация - работает
Т.к. вышеприведённые варианты прогресс-бара реализованы в браузере, то после завершения процесса необходимо закрыть вкладку с прогресс-баром и браузер.
Если открыта одна вкладка, то по 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, который в заголовке сообщает о количестве страниц.
Исходя из этого необходимо извлечь часть строки заголовка, начинающуюся с тире. Кроме того, разные браузеры используют либо длинное, либо короткое тире.
В представленных примерах реализована попытка учесть всё вышесказанное для обеспечения универсальности.
Все приведённые варианты прогресс-бара рабочие, но каждый из них обладает как своими достоинствами, так и недостатками, что ограничивает сферу их применения.
Если открыта одна вкладка, то по 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, который в заголовке сообщает о количестве страниц.
Исходя из этого необходимо извлечь часть строки заголовка, начинающуюся с тире. Кроме того, разные браузеры используют либо длинное, либо короткое тире.
В представленных примерах реализована попытка учесть всё вышесказанное для обеспечения универсальности.
Все приведённые варианты прогресс-бара рабочие, но каждый из них обладает как своими достоинствами, так и недостатками, что ограничивает сферу их применения.
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Прогресс-бар и др. информация - работает
Ввиду того, что современные браузеры очень неохотно дают возможность отключить "лишние" элементы своего окна, о также изменить его размер, а также в связи с тем, что браузеры довольно прожорливые в отношении памяти, попробовал реализовать прогресс-бар в "Блокноте" .
Данный прогресс-бар реализован на базе третьего варианта прогресс-бара, представленного выше, т.к. самообновления в "Блокноте", естественно, нет. В этом варианте имеется тот же существенный недостаток: "Блокнот" принимает фокус на себя до окончания процесса.
Задача позволяет задать размер и заголовок окна процесс-бара, а также шаг изменения процентов. Т.к. заголовком окна по факту является имя врЕменного файла, при его указании необходимо учитывать ограничения для имён файлов Windows. Например, нельзя использовать символы /, \, :, *, ?, ", <, >, |.
Также реализовано автоматическое размещение окна с прогресс-баром в центре экрана.
Данный прогресс-бар реализован на базе третьего варианта прогресс-бара, представленного выше, т.к. самообновления в "Блокноте", естественно, нет. В этом варианте имеется тот же существенный недостаток: "Блокнот" принимает фокус на себя до окончания процесса.
Задача позволяет задать размер и заголовок окна процесс-бара, а также шаг изменения процентов. Т.к. заголовком окна по факту является имя врЕменного файла, при его указании необходимо учитывать ограничения для имён файлов Windows. Например, нельзя использовать символы /, \, :, *, ?, ", <, >, |.
Также реализовано автоматическое размещение окна с прогресс-баром в центре экрана.
- Вложения
-
- Прогресс-бар в Блокноте.xstk
- (30.33 КБ) 45 скачиваний
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Прогресс-бар и др. информация - работает
В качестве примера реализовал задачу копирования файлов с прогресс-баром на основе "Блокнота".
В данной демонстрационной задаче отсутствуют дополнительные проверки на корректность исходных данных.
Несмотря на то, что в задаче используется действие копирования с запретом перезаписи существующих файлов, необходимо внимательнее подходить к выбору исходных файлов и результирующей папки для копирования во избежание возможной потери важных данных! Прервать уже запущенный процесс копирования не представляется возможным!
Самый безопасный вариант - это создать 2 произвольные папки специально для тестирования задачи. Оду из них необходимо наполнить копиями любых файлов, которые будут использоваться как источник для копирования. Вторая папка будет играть роль папки назначения.
В данной демонстрационной задаче отсутствуют дополнительные проверки на корректность исходных данных.
Несмотря на то, что в задаче используется действие копирования с запретом перезаписи существующих файлов, необходимо внимательнее подходить к выбору исходных файлов и результирующей папки для копирования во избежание возможной потери важных данных! Прервать уже запущенный процесс копирования не представляется возможным!
Самый безопасный вариант - это создать 2 произвольные папки специально для тестирования задачи. Оду из них необходимо наполнить копиями любых файлов, которые будут использоваться как источник для копирования. Вторая папка будет играть роль папки назначения.
- Вложения
-
- Копирование файлов с прогресс-баром.xstk
- (35.82 КБ) 51 скачивание
-
- Ас
- Сообщения: 308
- Зарегистрирован: Ср июн 24, 2009 4:12 am
- Благодарил (а): 8 раз
- Поблагодарили: 4 раза
Re: Прогресс-бар и др. информация - работает
Добрый день.
У Вас в цикле While есть выражение [Rounding1.Result]. Не могу сообразить, это что, результат какого действия?
У Вас в цикле While есть выражение [Rounding1.Result]. Не могу сообразить, это что, результат какого действия?
-
- Пилотируем с автопилотом
- Сообщения: 22
- Зарегистрирован: Чт янв 26, 2023 8:40 pm
- Благодарил (а): 0
- Поблагодарили: 0
Re: Прогресс-бар и др. информация - работает
Здравствуйте!
У меня в коде есть расчёт позиции для отображения значения процентов (посередине процесс-бара), которая не всегда оказывается целочисленной, поэтому я её округляю.
Кроме того, сами проценты тоже отображаются в целом виде, хотя их расчётные значение и шаг изменения, как правило, нецелочисленные (зависят от числа копируемых файлов). Поэтому я их также округляю.
Вообще в данном примере я несколько упростил себе задачу расчёта прогресс-бара, взяв в качестве 100% ровно 100 символов, иначе математики было бы больше .
Это результат округления.
У меня в коде есть расчёт позиции для отображения значения процентов (посередине процесс-бара), которая не всегда оказывается целочисленной, поэтому я её округляю.
Кроме того, сами проценты тоже отображаются в целом виде, хотя их расчётные значение и шаг изменения, как правило, нецелочисленные (зависят от числа копируемых файлов). Поэтому я их также округляю.
Вообще в данном примере я несколько упростил себе задачу расчёта прогресс-бара, взяв в качестве 100% ровно 100 символов, иначе математики было бы больше .