ADN Club > AutoLisp / VisualLISP и DCL
программа снимается по непонятной причине
altver:
Добрый всем день!
столкнулся со следующей проблемой:
приложенный лисп (не важно, что он выполняет) в самом начале должен подправить экран, а именно:
- включить MENUBAR,
- вкючить COMMANDLINE
- сделать фон экрана черным.
Порядок такой: я выключаю руками MENUBAR, COMMANDLINE и делаю фон экрана НЕ черным.
лисп все чинит и снимается. и только со второго раза (когда все починено) начинает работать...
ПОЧЕМУ???
Прошу помощи!
Спасибо заранее!
altver:
--- Код - Auto/Visual Lisp [Выбрать] ---(defun c:BGblack () (vl-load-com) (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object)))) (setq drafting (vla-get-drafting (vla-get-preferences (vlax-get-acad-object)))) (vla-put-GraphicsWinModelBackgrndColor disp 0) (vla-put-ModelCrosshairColor disp 16777215) (vla-put-AutoSnapMarkerColor drafting 2) (princ))(defun Quick ( / ) (command "commandLine") (c:BGblack) (if (getvar "MENUBAR")(setvar "MENUBAR" 1)) (command "_.addselected" pause) (while (= (getvar "cmdactive") 1) (command pause) ) )(quick)
Алексей Кулик:
Код рушится на команде _.addselected (достатчно поставить точку останова на (command "_.commandline"). Почему ломается - я пока не знаю.
Алексей Кулик:
Вот такой код вроде бы срабатывает плюс-минус нормально:
--- Код - Auto/Visual Lisp [Выбрать] ---(vl-load-com) (defun c:bgblack () (bgblack) (princ)) ;_ end of defun (defun bgblack (/ disp drafting) (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object)))) (setq drafting (vla-get-drafting (vla-get-preferences (vlax-get-acad-object)))) (vla-put-graphicswinmodelbackgrndcolor disp 0) (vla-put-modelcrosshaircolor disp 16777215) (vla-put-autosnapmarkercolor drafting 2)) ;_ end of defun (defun quick (/ err) (command "_.commandLine") (bgblack) (if (getvar "MENUBAR") (setvar "MENUBAR" 1) ) ;_ end of if (if (vl-catch-all-error-p (setq err (vl-catch-all-apply (function (lambda () (command "_.addselected" pause) (while (= (getvar "cmdactive") 1) (command pause) ) ;_ end of while ) ;_ end of lambda ) ;_ end of function ) ;_ end of vl-catch-all-apply ) ;_ end of setq ) ;_ end of VL-CATCH-ALL-ERROR-P (princ (strcat "\n" (vl-catch-all-error-message err))) ) ;_ end of if) ;_ end of defun(quick)---
Добавлено:
И вот еще - постарайся либо вместо command использовать vl-cmdf, либо проверяй доступность command-s и при первой же возможности используй command-s
altver:
Спасибо большое, Алекей, однако и Ваш код снимается, аналогично моему... не вижу разницы к сожалению...Еще идеи есть?
Навигация
Перейти к полной версии