Тема: Использование ProgressBar в ObjectDCL
Здравствуйте, подскажите, пожалуйста, как использовать ProgressBar в ODCL для отслеживания хода выполнения любой функции, определенной defun в Lispe.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → DCL → Использование ProgressBar в ObjectDCL
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте, подскажите, пожалуйста, как использовать ProgressBar в ODCL для отслеживания хода выполнения любой функции, определенной defun в Lispe.
Достаточно просто.
Создаешь окно modeless с элементом ProgressBar, добавляеш текст или еще что-либо по усмотрению
Вызываешь окно перед циклом
так это будет выглядеть с элементами созданными по умолчанию:
[code]
(Odcl_Form_Show Untitled_DclForm1)
[/code
Устанавливаешь максимальные и минимальное заначения ProgressBar в соответствии с числом повторений твоего цикла
К приме для цикла из 100 повторений
[code]
(Odcl_Control_SetProperty "MinValue" 0)
(Odcl_Control_SetProperty "MaxValue" 100)
[/code]
теперь в цикле нужно устонавливать позицию методом "SetPos"
[code]
(setq i 0)
(repeat 100
(setq i (1+ i))
;;;ваши функции
(Odcl_Control_SetPos
Untitled_DclForm1_ProgressBar1
i
) ;_ end_Odcl_Control_SetPos
) ;_ end_repeat
[/code]
Потом закрываешь окно
вот вроде и все
Так в этом случае, по-моему, не функция разобьется по выполнению на 100 частей для отслеживания процентов, а просто сама функция выполнится 100 раз и ProgressBar в этом случае будет показывать не какая часть функции выполнилась, а сколько уже раз это произошло
Для ProgressBar есть DOSlib.
Хм..ProgressBar актуально использовать в функциях, которые обрабатывают информацию в цикле.
> Стас
Только весь DosLib таскать за собой ради 1-2 функций...
> kpblc
doslib16.arx весит 280 кб. попробуйте сделать в ObjectARX простой проект с одной функцией. Получите что-то в районе 250 кб
> serzh
Я далеко не спец в ObjARX, но то, что делал уважаемый Александр Ривилис (естественно, что говорю о том, чем сам пользуюсь), весит максимум 58 кб (это dwgconvert2004.arx), остальные файлы чуток поменьше. У меня ощущение, что в объемных ARX-приложениях на 1-2 функции просто напихано немеряно лишней информации.
Для справки: ProgressBar того же автора - 39 кб.
До ObjectARX мне еще далеко...так что пока придется отказаться от использования ProgressBar :)
> kpblc
Да я и сам не спец. просто как то попробовал откомпилировать простую вещь и получил 250 кб.
Конечно использование DosLib дело вкуса. но 280 кб и по сравнению с 50 не много. тем более там есть много что полезного
> serzh
Только objARX слишком сильно завязан на конкретную версию. Так что для полноты картины придется таскать 280 кб для 2002, 280 кб для 2004-2006 и еще 280 для 2007. Итого уже метр без малого.
> serzh
Это если с полной отладочной информацией и с режимом Enable Incremental Linking, то может быть и так. А в doslib16.arx масса различных функций, так что размер достаточно скромный.
> kpblc
:)
> Михаил
Почитайте здесь: https://www.caduser.ru/forum/topic18226.html
> Михаил
есть простой вариант:
http://www.afralisp.net/lispa/lisp53.htm
и не надо ничего за собой таскать.
> DMS
Использование DCL требует обязательного наличия кнопок, что зачастую не гуд.
Надискутировали...:)
А еще можно в статусной строке рисовать | <-палочки, или % с чисолом (55%). Как вариант и все на лиспе. Тогда ничего таскать не нужно.
> Стас
не надо так расстраиваться из-за того, что всю жизнь таскал с собой чемодан всяких приблуд, а решение было под ногами :)
> kpblc
немного поколдовал:
LSP
(defun C:PROGRESS (/ loopmax dcltut_dat) (setq dcltut_dat (load_dialog "_dcl.dcl")) (new_dialog "dcltut" dcltut_dat) (setq loopmax 10000) (setq fillx (dimx_tile "progbar")) (setq filly (dimy_tile "progbar")) (start_image "progbar") (fill_image 0 0 fillx filly -15) (end_image) (loopfunc) (term_dialog) (unload_dialog dcltut_dat) (princ) ) (defun loopfunc (/ fillx filly loopfunc loopmax loop-counter) (setq fillx (dimx_tile "progbar")) (setq filly (dimy_tile "progbar")) (start_image "progbar") (fill_image 0 0 fillx filly -15) (end_image) (setq loop-counter 0) (setq loopmax 10000) (while (<= loop-counter loopmax) (start_image "progbar") (fill_image 0 0 (/ (* loop-counter fillx) loopmax) filly 5) (end_image) (setq loop-counter (1+ loop-counter)) ) (princ) )
DCL
dcltut: dialog {fixed_width=true; label="DCL Progress Bar"; :image {key="progbar"; width=50; height=1; is_cancel=true;} }
осталось все соединить в один файл с программной загрузкой DCL и подредактировать чуть-чуть.
> DMS
Круто. У меня не получалось, почему я и сказал > kpblc (2006-10-05 12:47:18).
> DMS
Я и не расстраиваюсь. :) Использую DosLib, вариант с fill_image тоже как то пробовал сделать, но почему то не стал использовать...
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → DCL → Использование ProgressBar в ObjectDCL
Форум работает на PunBB, при поддержке Informer Technologies, Inc