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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Почему autocad спрашивает сохранить ли файл после зуммирования (редактирования не было)?

Почему autocad спрашивает сохранить ли файл после зуммирования (редактирования не было)?

Ответ
Поиск в этой теме
Непрочитано 11.03.2016, 10:54 #1
Почему autocad спрашивает сохранить ли файл после зуммирования (редактирования не было)?
eilukha
 
Регистрация: 10.09.2007
Сообщений: 10,592

Почему autocad спрашивает сохранить ли файл после зуммирования (редактирования не было)? Как это сообщение убрать?
Просмотров: 4608
 
Непрочитано 11.03.2016, 10:55
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Потому что команды панорамирования и зуммирования вносят изменения в файл. На форуме вопрос поднимался, насколько я помню, отказаться от такого поведения невозможно и придется мириться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.03.2016, 10:58
#3
eilukha


 
Регистрация: 10.09.2007
Сообщений: 10,592


Странная программа.
eilukha вне форума  
 
Непрочитано 11.03.2016, 11:01
#4
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,096


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
придется мириться
.... или просматривать файлы не через автокад / а например ч/з трувью, или сторонние продукты
v.psk вне форума  
 
Автор темы   Непрочитано 11.03.2016, 11:05
#5
eilukha


 
Регистрация: 10.09.2007
Сообщений: 10,592


Которые условно бесплатные, навязчиво рекламные, без спроса меняющие ассоциации файлов ?
eilukha вне форума  
 
Непрочитано 11.03.2016, 11:24
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


В чертеже хранятся настройки текущего вида.
Зато при открытии, вы виде туже "картинку", что при закрытии.
trir на форуме  
 
Непрочитано 11.03.2016, 13:45
#7
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,639


Цитата:
Сообщение от eilukha Посмотреть сообщение
Которые условно бесплатные, навязчиво рекламные, без спроса меняющие ассоциации файлов ?
Это проблемы решаемые.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 11.03.2016, 14:57
#8
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
Сообщение от v.psk Посмотреть сообщение
.... или просматривать файлы не через автокад
Через перископ.
Profan вне форума  
 
Непрочитано 14.03.2016, 16:53
#9
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
На форуме вопрос поднимался, насколько я помню, отказаться от такого поведения невозможно и придется мириться.
Алексей, чисто гипотетически: нельзя разве создать реактор, который при запросе закрытия возьмет да и отменит все зумы и паны, и если кроме них ничего не было, то закроет файл без сохранения?
skkkk вне форума  
 
Непрочитано 14.03.2016, 17:07
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


ИМХО нереально: количество выполненных операций может превышать количество, установленное через UNDOCTL. Была у меня в свое время идея обрабатывать dbmod (http://autolisp.ru/2011/12/21/dbmod-proceed/), но попытки нормальной эксплуатации провалились: AutoCAD 2008/2009/2010 валился когда ему захочется (я пробовал использовать этот механизм для старта обработки документа; как оно будет себя вести внутри командных реакторов - тайна). Хочешь - можешь попробовать сам прорисовать реакторы на команды _.pan, _.zoom и изменение системных переменных tilemode и ctab. Я сейчас не смогу это сделать, на работе поиграться не получается.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.03.2016, 17:30
#11
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
Сообщение от skkkk Посмотреть сообщение
который при запросе закрытия возьмет да и отменит все зумы и паны
Сделай эксперимент: открой чертеж, выполни команду Показать-> рамка, потом отмени эту команду и попробуй закрыть чертеж...
Profan вне форума  
 
Непрочитано 14.03.2016, 18:01
#12
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Хочешь - можешь попробовать сам прорисовать реакторы на команды _.pan, _.zoom и изменение системных переменных tilemode и ctab.
Сам со временем свободным не в ладах. Да мне и не надо - просто из любопытства спросил. Я для закрытия использую две свои кнопки: закрыть с сохранением и без.

Цитата:
Сообщение от Profan Посмотреть сообщение
Сделай эксперимент: открой чертеж, выполни команду Показать-> рамка, потом отмени эту команду и попробуй закрыть чертеж...
Это-то ясно, что он спросит о сохранении, даже если отменить все. Просто закрывать надо по-хитрому .
skkkk вне форума  
 
Автор темы   Непрочитано 14.03.2016, 20:13
#13
eilukha


 
Регистрация: 10.09.2007
Сообщений: 10,592


Цитата:
Сообщение от skkkk Посмотреть сообщение
закрывать надо по-хитрому
- а сразу много файлов закрыть по-хитрому можно?
eilukha вне форума  
 
Непрочитано 14.03.2016, 20:52
#14
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Попробовал два варианта кода:
Код:
[Выделить все]
 (vl-load-com)

(if *vlr-cmd*
  (progn (setq *vlr-cmd* nil) (vlr-remove-all :vlr-command-reactor))
  ) ;_ end of if

(if (not *vlr-cmd*)
  (setq *vlr-cmd* (vlr-command-reactor
                    "dwgru-command-reactor"
                    '((:vlr-commandwillstart . _kpblc-vlr-command-start)
                      (:vlr-commandended . _kpblc-vlr-command-end)
                      (:vlr-commandcancelled . _kpblc-vlr-command-cancel)
                      (:vlr-commandfailed . _kpblc-vlr-command-fail)
                      )
                    ) ;_ end of vlr-command-reactor
        ) ;_ end of setq
  ) ;_ end of if

(defun _kpblc-vlr-command-start (react cmd)
  (setq cmd (vl-string-trim "_." (strcase (car cmd) t)))
  (cond ((wcmatch cmd "pan,zoom") (acad-push-dbmod)))
  ) ;_ end of defun

(defun _kpblc-vlr-command-end (react cmd)
  (setq cmd (vl-string-trim "_." (strcase (car cmd) t)))
  (cond ((wcmatch cmd "pan,zoom") (acad-pop-dbmod)))
  ) ;_ end of defun

(defun _kpblc-vlr-command-cancel (react cmd)
  (setq cmd (vl-string-trim "_." (strcase (car cmd) t)))
  (cond ((wcmatch cmd "pan,zoom") (acad-pop-dbmod)))
  ) ;_ end of defun

(defun _kpblc-vlr-command-fail (react cmd)
  (setq cmd (vl-string-trim "_." (strcase (car cmd) t)))
  (cond ((wcmatch cmd "pan,zoom") (acad-pop-dbmod)))
  ) ;_ end of defun

Код:
[Выделить все]
 (vl-load-com)

(if *vlr-cmd*
  (progn (setq *vlr-cmd* nil) (vlr-remove-all :vlr-command-reactor))
  ) ;_ end of if

(if (not *vlr-cmd*)
  (setq *vlr-cmd* (vlr-command-reactor
                    "dwgru-command-reactor"
                    '((:vlr-commandwillstart . _kpblc-vlr-command-start)
                      (:vlr-commandended . _kpblc-vlr-command-end)
                      (:vlr-commandcancelled . _kpblc-vlr-command-cancel)
                      (:vlr-commandfailed . _kpblc-vlr-command-fail)
                      )
                    ) ;_ end of vlr-command-reactor
        ) ;_ end of setq
  ) ;_ end of if

(defun _dbmod (param / sysvar)
  (setq sysvar (vl-remove nil
                          (mapcar (function (lambda (x / tmp)
                                              (if (setq tmp (getvar (car x)))
                                                (progn (setvar (car x) (cdr x)) (cons (car x) tmp))
                                                ) ;_ end of if
                                              ) ;_ end of LAMBDA
                                            ) ;_ end of function
                                  '(("cmdecho" . 0) ("menuecho" . 0) ("nomutt" . 1) ("sysmon" . 0))
                                  ) ;_ end of mapcar
                          ) ;_ end of vl-remove
        ) ;_ end of setq
  (vla-sendcommand
    (vla-get-activedocument (vlax-get-acad-object))
    (if param
      "(acad-push-dbmod) "
      "(acad-pop-dbmod) "
      ) ;_ end of if
    ) ;_ end of vla-sendcommand
  (foreach item sysvar (setvar (car item) (cdr item)))
  (princ)
  ) ;_ end of defun


(defun _kpblc-vlr-command-start (react cmd)
  (setq cmd (vl-string-trim "_." (strcase (car cmd) t)))
  (cond ((wcmatch cmd "pan,zoom") (_dbmod t)))
  ) ;_ end of defun

(defun _kpblc-vlr-command-end (react cmd)
  (setq cmd (vl-string-trim "_." (strcase (car cmd) t)))
  (cond ((wcmatch cmd "pan,zoom") (_dbmod nil)))
  ) ;_ end of defun

(defun _kpblc-vlr-command-cancel (react cmd)
  (setq cmd (vl-string-trim "_." (strcase (car cmd) t)))
  (cond ((wcmatch cmd "pan,zoom") (_dbmod nil)))
  ) ;_ end of defun

(defun _kpblc-vlr-command-fail (react cmd)
  (setq cmd (vl-string-trim "_." (strcase (car cmd) t)))
  (cond ((wcmatch cmd "pan,zoom") (_dbmod nil)))
  ) ;_ end of defun

Потестировал по-быстрому на ACAD2016x64Eng+SP1. Оба варианта в таком виде не обрабатывают движение колеса мыши. При этом, если руками вбить в ком.строку (acad-push-dbmod), потом отзуммировать как хочется, снова вбить руками (acad-pop-dbmod), то все работает "как надо". Ковыряться дальше сейчас нет ни малейшей возможности
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2016, 15:40
#15
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от eilukha Посмотреть сообщение
а сразу много файлов закрыть по-хитрому можно?
Я не пробовал, наверняка можно, заморочившись, это сделать.
Вопрос закрытия файлов программно поднимался в этих темах (там же указаны и "хитрые" методы):
Закрытие файла без сохранения
как закрыть файл из лиспа
Мои макрокоманды (начиная с #48)
Что я могу на данный момент подытожить:
1. Через AutoLISP или ActiveX можно закрыть (в т. ч. без сохранения) только неактивный чертеж либо все неактивные чертежи.
2. Закрыть без сохранения активный чертеж можно одним из "хитрых" способов, которые закрывают чертеж посредством обращения к (command). Пример - #20 из второй ссылки - создает временный слой, чтоб убедиться, что изменения были, и закрывает без сохранения изменений. Потому как, если бы изменений не было, то этот код срабатывал бы некорректно. Возможно, тут правильнее было бы обработать этот момент через переменную DBMOD, но имеем то, что имеем, и это работает. Каким-то образом именно при закрытии через (command) подавляются диалоговые окна. Похожее поведение наблюдается и в попытках без диалога перейти к контекстному редактированию внешней ссылки или блока.
3. Один из хитрых методов требует установленного VBA-enabler'a, который есть уже далеко не у всех. Этот метод представлен в #18 из второй ссылки.
4. Чтобы заполучить кнопку на панели инструментов на закрытие всех чертежей без запроса и без сохранения, нужно выполнить пункты 1 и 2 в лиспе и повесить этот лисп на кнопку через адаптацию.
5. Если хочется закрывать все чертежи без сохранения стандартной кнопкой "Закрыть" Автокада (или Windows?) , то другого способа, кроме как создавать командный реактор на закрытие и закрывать файл без сохранения до вывода диалогового окна - я не вижу. Однако из-под реактора запустить (command) нельзя - оно и понятно: обходим это "нельзя" через vla-SendCommand, назначаем на команду "закрыть" реакцию "закрыть" - получаем бесконечный цикл закрытия и срабатывания реактора на самого себя со скорым зависанием навсегда (до жесткого ресета).
6. Гипотетически, если на закрытие поставить реакцию в виде запуска из-под vla-SendCommand vba-модуля, то может сработать, но проверить не могу, поскольку VBA-enabler'a нет. Приложу код таким, как я это вижу в теории, можете попробовать на свой страх и риск:
Код:
[Выделить все]
 ;;; создаем командный реактор
(setq *REAC* (vlr-command-reactor nil (list '(:VLR-commandWillStart . commandWillStart))))

;;; прописываем реакцию на старт команд закрытия
(defun commandWillStart(reac data / ) 
	(setq CMD (car data))
	(if (member (setq CMD (car data)) (list "CLOSE" "_CLOSE" "QUIT" "_QUIT")) ; если это была команда закрытия
		(if (= (getvar "DBMOD") 16) ;;; и если DBMOD=16 (изменялся только вид чертежа),
		;;; то что-то выполняем...
			(alert "Да, мы перехватили диалог, но как теперь закрыть, не сохраняя, без использования (command)???")
		)
	
	)
)
Вместо десятой строки можно попробовать вставить нечто вроде
Код:
[Выделить все]
 (vla-SendCommand "_.vbastmt ThisDrawing.Close False")
Но я сомневаюсь, что это поможет.
skkkk вне форума  
 
Автор темы   Непрочитано 15.03.2016, 15:48
#16
eilukha


 
Регистрация: 10.09.2007
Сообщений: 10,592


Цитата:
Сообщение от skkkk Посмотреть сообщение
Код:
- как этими делами пользоваться?
eilukha вне форума  
 
Непрочитано 15.03.2016, 16:27
#17
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989


Цитата:
Сообщение от eilukha Посмотреть сообщение
а сразу много файлов закрыть по-хитрому можно?
В свое время делал себе меню по закрыванию-открыванию файлов, забирай.

Код:
[Выделить все]
 	[_Toolbar("Exit", _Floating, _Show, 100, 50, 1)]
	[_Button("Сохранить все", "all-save.bmp", "all-save.bmp")]^C^C(c:all-save)

	[_Button("Выйти с сохранением", "Quit-save.bmp", "Quit-save.bmp")]^C^C(c:all-save)(command "_.vbastmt" "application.quit ")
	[_Button("Выйти без сохранения", "Quit-no-save.bmp", "Quit-no-save.bmp")]^C^C(c:CloseWithoutSaveChanges)

	[_Button("Закрыть все файлы с сохранением, свернуть AutoCAD", "Close-all-save-min.bmp", "Close-all-save-min.bmp")]^C^C(c:close-all-save)
	[_Button("Закрыть все файлы  без сохранения, свернуть AutoCAD", "Close-all-no-save-min.bmp", "Close-all-no-save-min.bmp")]^C^C(c:close-all-no-save)

	[_Button("Закрыть файл с сохранением, свернуть AutoCAD", "Close-save-min.BMP", "Close-save.BMP")]^C^C(command "_zoom" "_e")(command "_.Zoom" "0.75x")(vla-put-windowstate (vlax-get-acad-object) acmin)(vl-cmdf "._qsave")(command "_.vbastmt" "ThisDrawing.Close False")
	[_Button("Закрыть файл без сохранения, свернуть AutoCAD", "Close-no-save-min.BMP", "Close-no-save.BMP")]^C^C(vla-put-windowstate (vlax-get-acad-object) acmin)(command "_.vbastmt" "ThisDrawing.Close False")

	[_Button("Закрыть файл с сохранением", "Close-save.BMP", "Close-save.BMP")]^C^C(command "_zoom" "_e")(command "_.Zoom" "0.75x")(vl-cmdf "._qsave")(command "_.vbastmt" "ThisDrawing.Close False")
	[_Button("Закрыть файл без сохранения", "Close-no-save.BMP", "Close-no-save.BMP")]^C^C(c:close-file-no-save)

	[_Button("Свернуть", "min.BMP", "min.BMP")]^C^C(vla-put-windowstate (vlax-get-acad-object) acmin)
	[_Button("Папка проекта", "folder.BMP", "folder.BMP")]^C^C(STARTAPP "explorer" (STRCAT "/e," (GETVAR "dwgprefix")))
	[_Button("dwg.ru", "ie.BMP", "ie.BMP")]^C^C(STARTAPP "C://Program Files//Internet Explorer//iexplore.exe forum.dwg.ru")
Вложения
Тип файла: zip Menu Exit.zip (44.3 Кб, 13 просмотров)
Nike вне форума  
 
Непрочитано 15.03.2016, 16:39
#18
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


0. Сохранить всю работу за день.
1. Как обычно - сохранить код (без номеров строк) в файл с расширением .lsp.
2. В начале кода добавить (vl-load-com)
3. Открыть новый сеанс Автокада
4. Загрузить сохраненный lsp-файл в Автокад. Можно простым перетаскиванием из папки в область чертежа-модели.
5. Покрутить колесо мыши - изменить вид чертежа.
6. Попробовать закрыть.
7. Если появилось окошко с надписью о перехвате, то закрыть Автокад, заменить (не добавить, а именно заменить) десятую строку из первого кода в посте #15 на предложенную ниже в том же посте.
8. Повторить п.п. 3, 4, 5 и 6.
Если чертеж закроется без сохранения и без лишних вопросов (конечно, если установлен VBA-enabler) - значить повезло и задача решена. А если нет - мои мысли пока на этом заканчиваются.

Интересно, а что если запилить реактор, который при открытии документа будет его сразу же закрывать, да и добавить это все дело в автозагрузку? Вылечить можно будет только удалением файла с этим кодом?

----- добавлено через ~3 мин. -----
Nike, опять же, если установлен VBA-enabler
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Почему autocad спрашивает сохранить ли файл после зуммирования (редактирования не было)?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что читают инженеры motor-serg Разное 2172 01.03.2024 09:20
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Почему после печати в файл чертёж имеет очень тусклые линии? Genesis AutoCAD 8 11.12.2011 01:37
не получается в Autocad 2009 сохранить файл созданный в Autocad 2008 mr.beginner AutoCAD 4 10.12.2010 20:11