| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ЛИСП.ACAD 2004.Как закрыть активный фаил/подавить окно?

ЛИСП.ACAD 2004.Как закрыть активный фаил/подавить окно?

Ответ
Поиск в этой теме
Непрочитано 17.07.2007, 07:13 #1
ЛИСП.ACAD 2004.Как закрыть активный фаил/подавить окно?
PL
 
California
Регистрация: 23.11.2006
Сообщений: 4,750

Как закрыть активный фаил без сохранения изменений/подавить "Really want to discard all changes to drawing"
(defun c:nn()
(command "zoom" "e")
(command "close" "y"))
Просто удобно с командной строки nn и ентер. В 2006 работало, в 2004 не могу подавить:
Command: y Unknown command "Y". Press F1 for help.
Command: T
Command: Really want to discard all changes to drawing? <N>
Просмотров: 1716
 
Непрочитано 17.07.2007, 09:27
#2
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Не так все просто. Надо учитывать ряд факторов. Вот функции для примера, чтобы понять, как это делается.


Код:
[Выделить все]
(defun ru-dwg-save-as-query (obj_acad_doc / titled writeable name reply)
  (setq titled    (= 1
                     (vlax-variant-value (vla-getvariable obj_acad_doc "DWGTITLED"))
                  ) ;_ end of =
        writeable (= 1
                     (vlax-variant-value
                       (vla-getvariable obj_acad_doc "WRITESTAT")
                     ) ;_ end of vlax-variant-value
                  ) ;_ end of =
        name      (if titled
                    (vlax-get obj_acad_doc "FULLNAME")
                    (vlax-variant-value (vla-getvariable obj_acad_doc "DWGNAME"))
                  ) ;_ end of if
        reply     (ru-dlg-yes-no-cancel
                    (ru-string-format "Сохранить изменения в  %1?" name)
                  ) ;_ end of ru-dlg-yes-no-cancel
  ) ;_ end of setq
  (cond
    ((= reply "YES")
     (cond
       ;;  REFEDIT active ??
       ((/= ""
            (vlax-variant-value (vla-getvariable obj_acad_doc "REFEDITNAME"))
        ) ;_ end of /=
        (ru-msg-alert "Нельзя сохранить документ при активной команде REFEDIT!")
        (exit)
       )
       ((and titled writeable)
        (vla-save obj_acad_doc)
       )
       (t
        (if (setq name (getfiled "Сохранить документ в  " name "dwg" 1))
          (vla-saveas obj_acad_doc (vlax-make-variant name))
          (exit)
        ) ;_ end of if
       )
     ) ;_ end of cond
    )
    ((= reply "CANCEL")
     (exit)
    )
  ) ;_ end of cond
) ;_ end of defun




(defun C:QQUIT (/ doc active_doc)
  (if (= 0 (getvar "SDI"))
    (progn
      (ru-error-save-sysvars '(("CMDECHO" 0)))
      (setq active_doc (ru-obj-get-active-document))
      (vlax-for doc (ru-obj-acad-collection "Documents")
        ;;  Пропускаем все, кроме текущего
        (if (not (equal active_doc doc))
          (progn
            (if (/= 0 (vlax-variant-value (vla-getvariable doc "DBMOD")))
              ;; Документ был изменен
              (ru-dwg-save-as-query doc)
              ;; Не был изменен и не сохраняем
              (vla-close doc (vlax-make-variant :vlax-false))
            ) ;_ end of if
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of vlax-for
      ;; А текущий закрываем обычным способом
      (vla-sendcommand active_doc "_.QUIT ")
    ) ;_ end of progn
    (vl-cmdf "_.QUIT")
  ) ;_ end of if
  (princ)
) ;_ end of defun
Замените функции ru-dlg-yes-no-cancel, ru-string-format, ru-msg-alert, ru-error-save-sysvars, ru-obj-get-active-document, ru-obj-acad-collection на свои аналоги.

Здесь показан прынцып. Это для "быстрого выхода", но отсюда можно вытащить закрытие текущего через команду _QUIT.

А чтобы запросы подавить, надо предварительно точно проанализировать все возможные варианты (показаны в примере) и программно выдавать соответствующий ответ.

Не забывать про подчерки перед именами команд и опций.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 17.07.2007, 23:08
#3
PL


 
Регистрация: 23.11.2006
California
Сообщений: 4,750


спасибо, попробую. Надо же в 2006 и 2008 без проблем, а тут приходится в 2004 возиться...
PL вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ЛИСП.ACAD 2004.Как закрыть активный фаил/подавить окно?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск