Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
В общем, решил подытожить существующие методы изготовления собственной полосы прогресса с помощью стандартных инструментов NeoBook. Также существует плагин с этим компонентом.
Для того, чтобы расчет прогресса был возможен в принципе, необходимо заранее знать или иметь возможность посчитать общее конечное число требуемых элементов для операций (общее количество файлов, строк, символов, загруженных байт и пр.).
Для примера мы возьмем построчное чтение текстовых файлов, вычислив общее кол-во строк мы приготовим прогрессбар этого процесса:
Способ 1 - дискретный прогрессбар из 36 отдельных обьектов, рассчитываем пороговые значения прогресса для отображения каждого последующего элемента при достижении порога или его превышении. Здесь мы исходим из расчета кол-ва линий файла на одно деление прогресса, хотя логичнее наоборот, но мне это показалось интересным. В данном случае, если кол-во линий файла меньше чем кол-во элементов прогресса (36), отобразится только кол-во пройденных элементов, что можно использовать...
Способ 2 - прогрессбар в виде горизонтально самозаполняющегося (или растягивающегося) рисунка небольшой ширины. Здесь и далее мы наоборот исходим из расчета размера шага нарастания ширины рисунка на одну линию файла. Прогрессбар будет заполнен независимо от количества строк в файле. При каждом обороте цикла и обработке одной линии файла происходит увеличение ширины рисунка на вычисленный шаг (инкремент) в расчете на одну линию файла.
Способ 3.1 - имеем готовый полноразмерный прогрессбар, задвинутый за пределы проекта или обьекта так, что его не видно. В данном случае я использовал копию части фона приложения с вырезанным прозрачным окном для бара (можно использовать прозрачный png). Под этим окном подложен готовый к движению прогрессбар на стартовой позиции. Перемещение осуществляется по оси Х с помощью MoveObject, величина координаты нарастает по инкременту, рассчитанному на одну линию файла.
Способ 3.2 - то же самое, только с помощью реального движения обьекта по траектории оси с помощью MoveObjectAlongPath, которое можно регулировать. Движение более плавное, хотя и медленное, хорошо выглядит для небольших обьемов операций, где другие методы дают резкий скачок.
Способ 4 - аналогичен 3.2, только прогрессбар и фон зафиксированы, а движется вложенный рисунок под фон, скрывающий прогрессбар.
Следует отметить, что расчет координат происходит в основном путем присвоения в Setvar, также из-за операций деления возникают дробные числа (а также вероятны небольшие отклонения в связи с ними, которые впрочем компенсируются). Это несущественно, т.к. используемые команды терпимо к ним относятся. Но кроме MoveObjectAlongPath, координаты не должны содержать чисел с запятой, поэтому чтобы округлить значения используется Math, а чтобы при этом не потерять дробную часть при инкременте координаты, параллельно используется Setvar.
Код прокомментирован. Где-то мог накосячить или сделать лучше, предложения приветствуются.
Под "линиями файла" имеются в виду те единицы, которые мы подсчитываем для отмера прогресса (в данном случае это строки)?
да, я использовал терминологию команд, линия это строка текстового файла... Взял чтение файла в качестве простейшего примера, операция может быть любой, какая имеет последовательные шаги которые могут быть зациклены. Хотя это необязательно, в цикле прогрессбара могут проверяться внешние параметры (например при отсчете времени), отвечающие требованиям описанным в начале поста. В качестве шага используются события операции (перечисление отдельных строк), операция имеет конечный размер (общее число строк файла).
Quote (Вадим)
для чего это может понадобиться?
ну как для чего? показывает ровно столько полосок, сколько линий в файле. Визуализация конкретного числа, так сказать... Используется для величин равных или не превышающих конечный размер операции, в качестве индикатора - времени, процентов, загрузки памяти/процессора и пр. Другие способы отображают именно прогресс и непригодны для индикации результата, который в них всегда образно говоря в итоге равен 100%. Ну точнее, в данном случае это нечто среднее между индикатором и прогрессбаром, все таки принцип индикатора более прост и требует конечных значений в моменты времени. А в прогрессбаре время ограничено работой операции. Как задавать вопросы
Ну точнее, в данном случае это нечто среднее между индикатором и прогрессбаром
А, теперь дошло до меня. Действительно, полезная идея!
Добавлено (06 Март 2011, 23:23) --------------------------------------------- Раз уж здесь идет систематизация прогрессбаров, то может быть кто-то добавит другие разновидности для примера? Можно и типовые, и прикольные.
Например, циклический индикатор загрузки (в частности, используется Сергеем в Информере); еще можно с использованием флеш или гиф анимацию (напр., открылась дверца, из нее появился смешной человечек, пошел по "коридору" прогрессбара, в конце открыл дверцу и ушел в нее...; или какой-нибудь муравей тащит за собой гусеницу, волочет ее за голову... тело гусеницы было бы заполнителем прогрессбара...; самолетик тащит за собой плакат...); или печатается слово, по букве, до конца строки; или пространство отведенное под прогрессбар "зарастает травой" или "индевеет"; строитель закладывает пространство кирпичами...; огонь пожирает полено (у Гарика есть реалистичный огонь)... ; ну и т.д. А может быть кому-то пригодится идея "обратного прогрессбара" (например, собачка пожирает кость или печенье... доела до конца, процесс завершился).
спасибо за пример. чуть позже рассмотрю по подробнее... Заинтересовал больше первый способ. Я тоже разрабатывал что-то подобное в каком-то проекте,только я был больше заинтересован масштабированием в реальном времени с постепенным изменением цвета процентов и у меня получилось, если найду, то сделаю пример завтра. Win7 Pro SP1 x64; NBv5.5.4rus,v5.6.2rus, v5.7.0en, Opera
ну с изменением цвета то проблем нет, достаточно подсунуть другие рисунки нужного цвета в нужные обьекты. а можно и динамически менять рисунки всего прогрессбара. Почему мне лучше ковырять вручную, чем компонент плага ставить, можно сделать все как хочешь визуально, добавить эффекты. Как задавать вопросы
Да,забавные примерчики,несколько вариаций,для тех,кто с этим ни разу не сталкивался будет в помощь.Отлично! надо тоже забацать какой-нить креативчик,как Вадим написал - анимированный (хорошая идея) и скинуть--самому интересно стало.
Времени разбираться особо не было, но чего-то у меня первый пример работать не желает ни в какую.
Quote (DEMBEL)
из-за операций деления возникают дробные числа
Для борьбы с подобными "неприятностями"существуют такие вещи как Round или Trunc. Для этого вместо SetVar можно (и нужно) применить Math с соответствующими опциями. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
В первом примере прогресс идет только до того момента, пока и на сколько хватает строк в файле (и не больше 36, если я правильно помню). ________________
До кучи сделал три совсем простых примера прогрессбара. Может пригодиться для новичков. Для расчета движения использовал самый простой вариант - паузу.
- Заполнение символами (буквами фразы или нужными символами)
- Движение слайдера
- Растягивание объекта Прямоугольник (с заливкой). В принципе точно также можно растягивать и другие объекты, рисунок например.
пока и на сколько хватает строк в файле (и не больше 36, если я правильно помню).
нет, прогресс идет нормально для любых количеств, просто если строк менее 36 то заполняется не весь прогрессбар. С первым способом я и сам не до конца понял что к чему, но все работает нормально.
Quote (Вадим)
самый простой вариант - паузу.
пауза неинтересно, лучше реальные команды для наглядности.
Quote (Peter)
первый пример работать не желает ни в какую.
странно, там вроде и неработать-то нечему... проверь с разными текстовыми файлами с разным кол-вом строк (маленьким или побольше)... я тестировал на файлах примерно в 20 и 500 строк.
странно, там вроде и неработать-то нечему... проверь с разными текстовыми файлами с разным кол-вом строк
С большим количеством строк вроде работает. а вот что происходит в случае с файлом в 5 строк:
Quote (DEMBEL)
хотя логичнее наоборот, но мне это показалось интересным.
Чем?
Quote (DEMBEL)
что можно использовать...
Как?
По идее, "прогресс" должен отображать относительный ход выполнения, т.е. независимо от количества строк в файле всегда должен заполняться до конца, причем - пропорционально. А иначе, какой смысл в "прогрессе"?
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Этот материал аккурат для раздела "готовых проектов" (или типа "узлов", как в ММВ), но не для статей.
Добавлено (07 Март 2011, 06:19) --------------------------------------------- Если DEMBEL посчитает нужным, то перенесёт.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Поэтому и пять делений. Первый вариант прогрессбара (из первого поста) как раз и подсчитывает число строк. Т.е. это скорее визуализатор какого-либо процесса, в стиле прогрессбара.
Quote (DEMBEL)
нет, прогресс идет нормально для любых количеств, просто если строк менее 36 то заполняется не весь прогрессбар
Я так и понял, просто непонятно сформулировал. У меня тоже работает, и у Петра (судя по скриншоту) тоже все работает.
Quote (DEMBEL)
пауза неинтересно, лучше реальные команды для наглядности
Согласен, потом как-нибудь добавлю.
Quote (Peter)
для раздела "готовых проектов" (или типа "узлов", как в ММВ)
если строк менее 36 то заполняется не весь прогрессбар
Вот это-то и вызывало у меня непонятки, пока повнимательнее пост Дембеля не прочел.
Quote (Вадим)
лучше реальные команды для наглядности
Желательно. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
До кучи сделал три совсем простых примера прогрессбара. Может пригодиться для новичков.
Как и обещал -- тоже до кучи соорудил примерчик Попытался максимально кратко подойти к решению этого вопроса. Не зависимо от изначальной ширины нашего контейнера в котором собс-но и находится наш прогресс и количества строк в файле наша формула решает поставленную перед ней задачую.
хм, интересный расчет. а обезьяна это гон, лучше сделать такие же вращающиеся циферки на флеше, и чтобы показывало реальный процент. не знаю, можно ли так обьединить флеш с нб, наверное можно? Как задавать вопросы
Ну почему же? По-моему, как-раз это - "гвоздь программы"!
А можно ещё и стриптиз показать... С "процентами"... УХ!!!
А то все полосочки... Полосочки... Банально и скучно...
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
только какого-нибудь стандартного или универсального вида, чтобы подошло к любому проекту. Небольшого размера. Ну, без фанатизма и обезьян в общем... а можно и полосочки, я где-то видел примеры прогрессбаров на яваскрипте, динамически меняется цвет и пр... очень эротично. Как задавать вопросы
я где-то видел примеры прогрессбаров на яваскрипте, динамически меняется цвет и пр... очень эротично
Ну, если это эротично, то, что и тут мешает менять цвет "полоски"? SetObjectFill никто не отменял....
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
показывало реальный процент. не знаю, можно ли так обьединить флеш с нб
Кстати, а зачем тут вообще флэш-то? Отображение "реального процента" можно и в самой NB сделать.
Вот только с "прыгающими циферками" в NB (без флэш) затруднительно будет...
Добавлено (07 Март 2011, 17:22) ---------------------------------------------
Quote (Гарик)
включаем фантазию и вперёд.
Гарик, так включайте! И - ВПЕРЕД!!!
Идея вам дадена...
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
растягивающийся прямоугольник это не эротично, вот рисованный бар другое дело. подменять картинку сложнее будет, можно картинку анимированную вставить. а лучше сразу флеш-запчасть сделать. Как задавать вопросы
Отчего же? Можно сделать не просто растягивающийся прямоугольник, а и ещё с динамически изменющимся цветом заливки, и это куда более (на мой вгляд) будет "эротичнее" (и главное - экономичнее и гибче), чем картинка. Впрочем, каждому - свое...
Quote (DEMBEL)
а лучше сразу флеш-запчасть сделать
По моему убеждению, применение флэш в NB можно рассматривать только как, своего рода, "украшение" и не более. Все остальное - костыли.
Добавлено (07 Март 2011, 18:13) --------------------------------------------- DEMBEL, я смотрю - ты тяготеешь к "готовым решениям", где остается только подставить нужные значения в нужные опции, и вуаля! Подобные вещи можно сделать только с помощью плагина. Но можно ведь и средствами самой NB вполне обойтись, и твои же собственные примеры - тому подтверждение. Вполне неплохие "прогресс-бары" получились и у тебя и у Гарика.
Да, согласен, что каждый такой "прогресс-бар" потребуется адаптировать под конкретную задачу, но ведь иногда надо и ручками (да и головой тоже) поработать.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
не, я тяготею именно к визуализации решений, поэтому думаю что на флеше еще лучше можно сделать. а то что ручками делать это наоборот хорошо, можно все контролировать и сделать как хочешь.
вращение барабана сделал средствами НБ. И циферки тоже самое
Да тут напруга скорее не в самом по себе вращении, а в том, что вращение должно быть "осмысленным", что ли... Т.е циферки должны синхронно и правильно отображать ход прогресса. На взрослом языке это сделать не проблема, а вот в NB.... Могут возникнуть накладки.... Хотя...
Добавлено (08 Март 2011, 22:25) ---------------------------------------------
Quote (DEMBEL)
на флеше еще лучше можно сделать.
Лучше, чем в NB с помощью картинок или прямоугольников, может и возможно, но плагином это по-любому будет лучше флэш, правда и поработать для этого потребуется куда больше, чем во флэш. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Прикольно с обезьяной получилось! Была бы там еще графика по-чище (у меня видны точки вокруг обезьяны и ручки), а в целом, как пример нестандартного прогрессбара - мне кажется - отлично! Это же здорово - показать, что в NB можно сделать любой прогрессбар, кого-то вдохновит на создание своего.
В готовом проекте далеко не всякий прогрессбар будет уместным, а здесь, в качестве примеров и запчастей - чем больше разнообразных и нестандартных вариантов (даже совсем фантастических), тем лучше!
не, я поигрался с примером 1 с эффектами появления полосок, а также с анимированными барами (блики там всякие), с нб-эффектами выглядит весьма даже оригинально. флеш и плаг это наверное уже слишком. Как задавать вопросы