Тема: Использование ProgressBar в ObjectDCL

Здравствуйте, подскажите, пожалуйста, как использовать ProgressBar в ODCL для отслеживания хода выполнения любой функции, определенной defun в Lispe.

Re: Использование ProgressBar в ObjectDCL

Достаточно просто.
Создаешь окно 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]
Потом закрываешь окно
  вот вроде и все

Re: Использование ProgressBar в ObjectDCL

Так в этом случае, по-моему, не функция разобьется по выполнению на 100 частей для отслеживания процентов, а просто сама функция выполнится 100 раз и ProgressBar в этом случае будет показывать не какая часть функции выполнилась, а сколько уже раз это произошло

Re: Использование ProgressBar в ObjectDCL

Для ProgressBar есть DOSlib.
Хм..ProgressBar актуально использовать в функциях, которые обрабатывают информацию в цикле.

Re: Использование ProgressBar в ObjectDCL

> Стас
Только весь DosLib таскать за собой ради 1-2 функций...

Re: Использование ProgressBar в ObjectDCL

> kpblc
doslib16.arx весит 280 кб. попробуйте сделать в ObjectARX  простой проект с одной функцией. Получите что-то в районе 250 кб

Re: Использование ProgressBar в ObjectDCL

> serzh
Я далеко не спец в ObjARX, но то, что делал уважаемый Александр Ривилис (естественно, что говорю о том, чем сам пользуюсь), весит максимум 58 кб (это dwgconvert2004.arx), остальные файлы чуток поменьше. У меня ощущение, что в объемных ARX-приложениях на 1-2 функции просто напихано немеряно лишней информации.
Для справки: ProgressBar того же автора - 39 кб.

Re: Использование ProgressBar в ObjectDCL

До ObjectARX мне еще далеко...так что пока придется отказаться от использования ProgressBar :)

Re: Использование ProgressBar в ObjectDCL

> kpblc
Да я и сам не спец. просто как то попробовал откомпилировать простую вещь и получил 250 кб.
Конечно использование DosLib дело вкуса. но 280 кб и по сравнению с 50 не много. тем более там есть много что полезного

Re: Использование ProgressBar в ObjectDCL

> serzh
Только objARX слишком сильно завязан на конкретную версию. Так что для полноты картины придется таскать 280 кб для 2002, 280 кб для 2004-2006 и еще 280 для 2007. Итого уже метр без малого.

Re: Использование ProgressBar в ObjectDCL

> serzh
Это если с полной отладочной информацией и с режимом Enable Incremental Linking, то может быть и так. А в doslib16.arx масса различных функций, так что размер достаточно скромный.

> kpblc
:)
> Михаил
Почитайте здесь: https://www.caduser.ru/forum/topic18226.html

Re: Использование ProgressBar в ObjectDCL

> Михаил
есть простой вариант:
http://www.afralisp.net/lispa/lisp53.htm
и не надо ничего за собой таскать.

Re: Использование ProgressBar в ObjectDCL

> DMS
Использование DCL требует обязательного наличия кнопок, что зачастую не гуд.

Re: Использование ProgressBar в ObjectDCL

Надискутировали...:)
А еще можно в статусной строке рисовать | <-палочки, или % с чисолом (55%). Как вариант и все на лиспе. Тогда ничего таскать не нужно.

Re: Использование ProgressBar в ObjectDCL

> Стас
не надо так расстраиваться из-за того, что всю жизнь таскал с собой чемодан всяких приблуд, а решение было под ногами :)

Re: Использование ProgressBar в ObjectDCL

> 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 и подредактировать чуть-чуть.

Re: Использование ProgressBar в ObjectDCL

> DMS
Круто. У меня не получалось, почему я и сказал > kpblc (2006-10-05 12:47:18).

Re: Использование ProgressBar в ObjectDCL

> DMS
Я и не расстраиваюсь. :) Использую DosLib, вариант с fill_image тоже как то пробовал сделать, но почему то не стал использовать...