программа снимается по непонятной причине

Автор Тема: программа снимается по непонятной причине  (Прочитано 10402 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
Добрый всем день!
столкнулся со следующей проблемой:
приложенный лисп (не важно, что он выполняет) в самом начале должен подправить экран, а именно:
- включить MENUBAR,
- вкючить COMMANDLINE
- сделать фон экрана черным.
Порядок такой: я выключаю руками MENUBAR, COMMANDLINE и делаю фон экрана НЕ черным.
лисп все чинит и снимается. и только со второго раза (когда все починено) начинает работать...
ПОЧЕМУ???
Прошу помощи!
Спасибо заранее!

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:BGblack ()
  2.  (vl-load-com)
  3.  (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
  4.  (setq drafting (vla-get-drafting (vla-get-preferences (vlax-get-acad-object))))
  5.  (vla-put-GraphicsWinModelBackgrndColor disp 0)
  6.  (vla-put-ModelCrosshairColor disp 16777215)
  7.  (vla-put-AutoSnapMarkerColor drafting 2)
  8.  (princ)
  9. )
  10. (defun Quick ( / )
  11.                                       (command "commandLine")
  12.                                       (c:BGblack)
  13.                                       (if (getvar "MENUBAR")(setvar "MENUBAR" 1))
  14.                                        (command "_.addselected"  pause)
  15.                                    (while (= (getvar "cmdactive") 1)
  16.                                          (command pause)
  17.                                    )
  18.                                          )
  19. (quick)

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Код рушится на команде _.addselected (достатчно поставить точку останова на (command "_.commandline"). Почему ломается - я пока не знаю.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Вот такой код вроде бы срабатывает плюс-минус нормально:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.  
  3. (defun c:bgblack ()
  4.   (bgblack)
  5.   (princ)
  6. ) ;_ end of defun
  7.  
  8. (defun bgblack (/ disp drafting)
  9.   (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
  10.   (setq drafting (vla-get-drafting (vla-get-preferences (vlax-get-acad-object))))
  11.   (vla-put-graphicswinmodelbackgrndcolor disp 0)
  12.   (vla-put-modelcrosshaircolor disp 16777215)
  13.   (vla-put-autosnapmarkercolor drafting 2)
  14. ) ;_ end of defun
  15.  
  16. (defun quick (/ err)
  17.   (command "_.commandLine")
  18.   (bgblack)
  19.   (if (getvar "MENUBAR")
  20.     (setvar "MENUBAR" 1)
  21.   ) ;_ end of if
  22.   (if (vl-catch-all-error-p
  23.         (setq err (vl-catch-all-apply
  24.                     (function (lambda ()
  25.                                 (command "_.addselected" pause)
  26.                                 (while (= (getvar "cmdactive") 1)
  27.                                   (command pause)
  28.                                 ) ;_ end of while
  29.                               ) ;_ end of lambda
  30.                     ) ;_ end of function
  31.                   ) ;_ end of vl-catch-all-apply
  32.         ) ;_ end of setq
  33.       ) ;_ end of VL-CATCH-ALL-ERROR-P
  34.     (princ (strcat "\n" (vl-catch-all-error-message err)))
  35.   ) ;_ end of if
  36. ) ;_ end of defun
  37. (quick)
---
Добавлено:
И вот еще - постарайся либо вместо command использовать vl-cmdf, либо проверяй доступность command-s и при первой же возможности используй command-s
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
Спасибо большое, Алекей, однако и Ваш код снимается, аналогично моему... не вижу разницы к сожалению...Еще идеи есть?

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
попробовал vl-cmdf. поробовл command-s...отрицательный резльтат. работает со второго раза, когда все "починено"...

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Спасибо большое, Алекей, однако и Ваш код снимается, аналогично моему... не вижу разницы к сожалению...Еще идеи есть?

Я специально несколько раз перезапускал ACAD. Сейчас еще раз проверю.

Поменял command на vl-cmdf, ACAD2021:
Код - Auto/Visual Lisp [Выбрать]
  1.     (vl-load-com)
  2.      
  3.     (defun c:bgblack ()
  4.       (bgblack)
  5.       (princ)
  6.     ) ;_ end of defun
  7.      
  8.     (defun bgblack (/ disp drafting)
  9.       (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
  10.       (setq drafting (vla-get-drafting (vla-get-preferences (vlax-get-acad-object))))
  11.       (vla-put-graphicswinmodelbackgrndcolor disp 0)
  12.       (vla-put-modelcrosshaircolor disp 16777215)
  13.       (vla-put-autosnapmarkercolor drafting 2)
  14.     ) ;_ end of defun
  15.      
  16.     (defun quick (/ err)
  17.       (vl-cmdf "_.commandLine")
  18.       (bgblack)
  19.       (if (getvar "MENUBAR")
  20.         (setvar "MENUBAR" 1)
  21.       ) ;_ end of if
  22.       (if (vl-catch-all-error-p
  23.             (setq err (vl-catch-all-apply
  24.                         (function (lambda ()
  25.                                     (vl-cmdf "_.addselected" pause)
  26.                                     (while (= (getvar "cmdactive") 1)
  27.                                       (vl-cmdf pause)
  28.                                     ) ;_ end of while
  29.                                   ) ;_ end of lambda
  30.                         ) ;_ end of function
  31.                       ) ;_ end of vl-catch-all-apply
  32.             ) ;_ end of setq
  33.           ) ;_ end of vl-catch-all-error-p
  34.         (princ (strcat "\n" (vl-catch-all-error-message err)))
  35.       ) ;_ end of if
  36.     ) ;_ end of defun
  37.     (quick)
Независимо ни от чего код срабатывает корректно. У тебя какая версия ACAD?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
у меня 2023
проверил твою последнюю - нет, рушится в первый раз до починки.
а ты убираешь ком. строку или менюбар до запуска программы?

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
Что то не то...Сейчас проерил на 2021. все равно валится...
Еще раз спрашиваю, а ты до команды снимаешь менюбар, ком.строку и цвет экрана не черный?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Что снимал, что нет - на 2021 результат один и тот же. Все же попробуй поставить точку останова, а в настройках отладки укажи "Останавливаться на ошибке" (lispsys, естестенно, 0)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
А сделай Maximize на чертеж. и тогда попробуй еще раз, пожалуйста...

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
С бааальшим трудом наконец удалось повторить ситуацию. Вылет при первом запуске на (getvar "cmdactive") - там почему-то возвращается 0.
Похоже, картину портит (setvar "menubar" 1) - стоит закомментировать строку, как все начинает работать. Я бы попробовал через (vla-setsystemvariable (vla-get-activedocument (vlax-get-acad-object)) "menubar" 1). Вдруг сработает?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
Алексей, добрый день!
Все таки я считаю, что тут какая-то прнципиальная ошибка в этих трех переменнх, которые я пытаюсь изменить: MENUBAR, COMMANDLINE и фон экрана. заменил в коде команду на команду LINE. куда еще проще? Все равно прога исправляет переменные и валится. Только когда все исправлено можно чертить линию. Я уже голову сломал. Может BUG?


Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.      
  3.     (defun c:bgblack ()
  4.       (bgblack)
  5.       (princ)
  6.     ) ;_ end of defun
  7.      
  8.     (defun bgblack (/ disp drafting)
  9.       (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
  10.       (setq drafting (vla-get-drafting (vla-get-preferences (vlax-get-acad-object))))
  11.       (vla-put-graphicswinmodelbackgrndcolor disp 0)
  12.       (vla-put-modelcrosshaircolor disp 16777215)
  13.       (vla-put-autosnapmarkercolor drafting 2)
  14.     ) ;_ end of defun
  15.      
  16.     (defun quick (/ err)
  17.       (vl-cmdf "_.commandLine")
  18.       (bgblack)
  19.       (vla-setvariable  (vla-get-activedocument (vlax-get-acad-object)) "menubar" 1)
  20.       (if (vl-catch-all-error-p
  21.             (setq err (vl-catch-all-apply
  22.                         (function (lambda ()
  23.                                     (command "_.line" pause pause "")
  24.                                    
  25.                                   ) ;_ end of lambda
  26.                         ) ;_ end of function
  27.                       ) ;_ end of vl-catch-all-apply
  28.             ) ;_ end of setq
  29.           ) ;_ end of vl-catch-all-error-p
  30.         (princ (strcat "\n" (vl-catch-all-error-message err)))
  31.       ) ;_ end of if
  32.     ) ;_ end of defun
  33.     (quick)    

Оффлайн altverАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 118
  • Карма: 2
Интерсно,что если сделать чертеж minimize, то менюбар и ком строка не мешают, прога продолжает работать, а вот фон все равно валит команду...

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Единственный вариант с моей точки зрения - не трогать menubar. Один раз настроить при старте - и забыть. Если пользователь вдруг "погасил" меню - значит, ему это было нужно.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!