Тема: Как сохранить progress bar?

> alex
Может тебе подойдет вариант без экспрессов?
Работает всегда...

(defun _progress-init (i1 /)
(setq _prog-init (/ i1 100.)
progress-safe 0.)
(setvar "MODEMACRO"
(strcat "      0 %     "
"....................................................................................................")))
(defun _progress (/ i)
(setq progress-safe (1+ progress-safe))
(setvar "MODEMACRO"
(strcat "     "
(itoa (setq i (fix (/ progress-safe _prog-init))))
 " %    "
 (substr "##################################################" 1 (/ i 2))
(substr "...................................................................................................." 1 (- 100 i))))
(if (= i 100)
(progn (setq _prog-init nil
 progress-safe nil)
(setvar "MODEMACRO" ""))))
;;; Проверка
(_progress-init 1000)
  (repeat 1000
    (command "delay" 50)
    (_progress)
)

Re: Как сохранить progress bar?

При прокрутке колесика мыши при длительном выполнении программы (срабатывает intellyzoom) progress_bar пропадает проблемма описана
http://dwg.ru/forum/viewtopic.php?t=3845
Проблемма актуальна как для acet  утилит doslib (acet-ui-progress) так и для Expres утилит. Может есть какой способ отключить на время прокрутку колесика мышки?

Re: Как сохранить progress bar?

Почитайте там же мой ответ. А отключить прокрутку колесом мыши можно, но не нужно.

Re: Как сохранить progress bar?

Похоже, что без отключения колесика всеже не обойтись.Только как? Вот в чем вопрос,

Re: Как сохранить progress bar?

Я буду отвечать в форуме на dwg.ru, т.к. на этом форуме нет возможности присоединять файлы. sad (еще один маленький камушек в огород вебмастеру)

Re: Как сохранить progress bar?

> Евгений Елпанов
Очень неплохой вариант для того, чтобы не использовать сторонние arx-файлы. Один минус - при прерывании функции progressbar не чистится.  Но это можно организовать в функции обработки ошибок, вставив туда (setvar "MODEMACRO" "").
Немного притормаживает AutoCAD при попытках IntelliZOOM/PAN.
Но в общем очень здорово! Респект, Евгений!

Re: Как сохранить progress bar?

> Александр Ривилис
Спасибо за комплименты...
Посмотрел свою старую функцию и немного ее переделал - теперь ничего подтормаживать не должно.
Любопытно просматривать код старых программ - сейчас глобальными переменными как-то не пользуюсь - стараюсь обходиться...

(defun _progress-init (i1 /)
(setq _prog-init (/ i1 100.) progress-safe 0.)
(setvar "MODEMACRO"
(strcat ".    0 %     ...................................................................................................."))
) ;_  конец функции defun
(defun _progress (/ i)
(setq progress-safe (1+ progress-safe))
(if (/= (setq i (fix (/ progress-safe _prog-init))) (atoi(substr (getvar "MODEMACRO") 6 2)))
(setvar "MODEMACRO"(strcat "     "(itoa (setq i (fix (/ progress-safe _prog-init))))" %    "
(substr "||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||" 1 i)
(substr "...................................................................................................." 1 (- 100 i)))))
(if (= i 100)(progn (setq _prog-init nil progress-safe nil)(setvar "MODEMACRO" ""))))
;;; Проверка
(_progress-init 1000)
(repeat 1000 (command "delay" 50) (_progress))

Re: Как сохранить progress bar?

Выложил на http://dwg.ru/forum/viewtopic.php?t=384 … p;start=15 четыре варианта различных прогрессбаров: 1) Стандартный
2) В командной строке
3) В заголовке окна AutoCAD
4) В отдельном окошке по центру окна AutoCAD
Работает в версиях AutoCAD 2004-2006.
Больше идей куда можно засунуть прогрессбар мне в голову не приходит.

Re: Как сохранить progress bar?

> Александр Ривилис
Спасибо! Наверняка буду использовать ваши варианты.
Мне понравился вариант с отдельным окошком и конечно стандартный!
Единственное огорчение - напрочь отключен зум...
PS. Необходимость остальных вариантов кажется лишней для акада...
Просто не всякий пользователь будет искать прогрессбар в заголовке, хотя если акад в свернутом окне - на панели задач на кнопке акада будет отображаться процент выполнения, но тогда в тексте заголовка проценты надо вытащить на первое место, а только за ними размещать пояснение...

Re: Как сохранить progress bar?

> Александр Ривилис
У меня предположение, что команда зум чистит прогрессбар для своего использования, но если запустить ее с командной строки, то все нормально...

Re: Как сохранить progress bar?

> Евгений Елпанов

> Евгений Елпанов
Извините, что задержался с ответом - горел в своей машине sad. Но теперь уже все нормально и могу ответить:
1) IntelliZoom/PAN кажется уже можно включить для всех случаев, кроме процентиков в командной строке - почему-то при этом разваливается AutoCAD. Я еще доработаю и выложу, но только у себя на сайте, т.к. замахался переименовывать zip->dwg для загрузки на dwg.ru очередной версии.
2) IntelliZOOM/PAN у меня чистит стандартный прогрессбар только когда им чего-то не нравится, т.е. когда требуется регенерация. В этот момент она именно на месте прогрессбара и сообщает о своем недовольстве, даже не думая прогрессбар потом восстановить. sad
3) По поводу процентов в начале заголовка - согласен. Такая мысль была и у меня. Но я склонялся к единообразию. Завтра переделаю и здесь выложу ссылочку на исправленный файл.
А автор вопроса куда-то успел исчезнуть...

Re: Как сохранить progress bar?

Выложил обновленную версию: http://www.maestrogroup.com.ua/support/ProgressBars.zip
Там ProgressBars.arx и ProgressBars.lsp (для тестирования)
Исправления:
1) Вызов (onidleacad) уже не обязателен - включен внутрь во все прогрессбары.
2) Можно пользоваться IntelliZOOM/PAN свободно (хотя мне не очень понятно зачем ими пользоваться во время длительного процесса работы программы).
3) В прогрессбаре в заголовке окна AutoCAD сначала идут проценты, а за ними текст.

Re: Как сохранить progress bar?

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

Re: Как сохранить progress bar?

> Евгений
А что это Вы к старому нику вернулись? Случайно?

Re: Как сохранить progress bar?

> Александр Ривилис
Да, случайно!
Отвечал из дома с компьютера жены, а на имя не посмотрел...
Теперь буду внимательнее
:^D

Re: Как сохранить progress bar?

> Александр Ривилис
Приношу извинения за отсутствие.
Просмотрел Ваши варианты прогрессбаров. Понравились все. Думаю что именно их комлексное использование наиболее предпочтительно по следующим причинам:
1.При переключениях между прилжениями раньше автокад не всегда мог нормально отображать свое окошко и прогрессбар в заголовке окна будет здесь как никогда кстати.
2, Прогрессбар в отдельном окошке по центру окна AutoCAD помогает сгладить небольшие шереховатости стандартного при критических состояниях IntelliZOOM/PAN, который сам по себе предпочтительнее но отображается немного капризно.
3.Прогрессбар в коамндной строке может и перебор в моем случае(покольку не всегда отображается сомо окошко) но при индикации небольших процессов может быть очень полезен для информирования о невозможности пользовательского вввода.
Небльшим недостатком можно считать затреты времени на обработку всех прогбаров (при отключении (mdelay 10) прогрессбары визуализируют время на их обработку).Но на мой взгляд положительный эффект от их использования значительно выше.
В ближайшие дни постараюсь выкроить время и полнее протестировать их на более ресурсоемких программах.

Re: Как сохранить progress bar?

> Александр Ривилис
Для уменьшения мелькания при сборсе прогрессбара можно использовать Modemaсro для сдвига вправо данных строки состояния.

Re: Как сохранить progress bar?

> Александр Ривилис
Очень-очень понравилось!!!
:^D

Re: Как сохранить progress bar?

> alex

> Евгений Елпанов
Спасибо за комплименты (я их очень люблю) и конструктивную критику (люблю еще больше) biggrin
По поводу мелькания прогрессбара (я так понял речь идет о том, который как и в экспрессах) есть идейки, но на реализации их нужно время. Кстати во всех функциях xxxprogress есть третий параметр. В примерах он 0.25 - это минимальный интервал времени для перерерисовки прогрессбаров в секундах. Для уменьшения мелькания его можно увеличить. Нормально смотрится  0.5...1.0 сек.

Re: Как сохранить progress bar?

> Александр
Ривилис (2005-06-06 12:45:08

По поводу мелькания прогрессбара

Имелось ввиду мелькание статусной строки автокада при потере и востановлении прогрессбара. Та которая содержит координаты, кнопоки Snap Ortho и др. А Modemacro скажем = "___________" сдвигает их вправо и не позволяет им отрисовываться на месте работы прогресса. Хотя это конечно можно сделать и в самом Лиспе.

Re: Как сохранить progress bar?

> [Re:] Александр Ривилис
У меня, к примеру, есть функция MYFUN, которая производит некоторые изменения в базе чертежа, так что эти изменения занимают ощутимое время и не видны на экране. Уместно было бы для спокойствия пользователя использовать Ваш прогрессбар, но мне не понятно, в какой момент необходимо запустить команду, скажем, PROGRESS1, ведь, по идее, она должна выполняться параллельно с моей функцией MYFUN и синхронизироваться с ней. Если не сложно, поясните пожалуйста.

Re: Как сохранить progress bar?

Вопрос снят...
Сказался тяжелый рабочий день.

Re: Как сохранить progress bar?

Пастух пишет:

Вопрос снят...
Сказался тяжелый рабочий день.

Хорошо, что у меня тоже был тяжелый день, и я увидел Ваш вопрос только сейчас. Он меня насмешил и очень повысил настроение biggrin

Re: Как сохранить progress bar?

> alex
Я именно об этой же статусной строке говорил в посте > Александр Ривилис (2005-06-06 12:45:08). Использовать MODEMACRO я не хочу "по идеологическим соображениям". Есть идея, как это сделать красиво (по меркам программиста) средствами Windows, но пока нет времени на реализацию. Постараюсь оторовать себя от ремонта "украинского джипа" и выкроить на это время в ближайшие пару дней.

Re: Как сохранить progress bar?

> Александр Ривилис
Протестировал как и обещал более тщательно Ваши прогрессы.
Понравилось еще больше.
Время выполнения циклов составляло 3-6мин., с обработкой екселовских таблиц.
   Выявились небольшие замечания:
1.Прогрессбар (prgprogress) Отстает на 1% по сравнению с другими.
2.Понраился (onidleacad) в том числе и его работа в прогрессах. Отклик Автокада значительно улучшился, хотя и при работе этой функции получается выбить Автокада из его диспетчерского цикла, загрузив во время работы ресурсоемкое приложение, например Word.Но прогрессбар в строке заголовка главного окна AutoCAD в данном случае успешно справляется с визуализацией процесса а сам AutoCAD даже не пытается отображать свое окошко.
3,Не всегда срабатывают (prcstop) и (prdlgprogress). Опредильть причину так и не получилось.
4.Первый запуск снес AutoCAD но потом все было хорошо.
   Успехов в Вашем благородном деле. C Уважением AleX.