|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
18.01.2018, 14:54 | #1 | |
VB.NET сохранение файла при закрытии крестом.
Проектировщик ЭО,ЭМ, ЭОС
Нижний Новгород
Регистрация: 18.07.2007
Сообщений: 256
|
||
Просмотров: 5569
|
|
||||
Регистрация: 18.12.2010
Сообщений: 5,057
|
|
|||
|
||||
1. По ссылке https://sites.google.com/site/bushma...ocument-events
есть кусок кода на VBA. На VBA мне было бы проще. Или я чего-то не понял !? 2. Ссылку смотрел, но не нашел события открытия документа |
||||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Хреново документацию листали...
Вот ссылка: https://sites.google.com/site/bushma...lection-events Вот события: DocumentCreated Срабатывает при создании окна документа. Возникает после создания нового рисунка или открытия существующего. DocumentCreateStarted Срабатывает перед тем как окно документа будет создано. Возникает перед созданием нового рисунка или открытием существующего. |
|||
|
||||
Итого:
Файл "acad.dvd" загружается автоматом. Сохраняю текущее время в USERS1 по AcadStartup (работаю SDI, равном 1) При закрытии файла ( в AcadDocument_BeginDocClose ) смотрю разницу по времени (больше 30 минут) сохраняю в папку "e:\temp\" Вроде все работает. Отдельное спасибо Boxa в секции module1 Код:
|
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
а зачем в User1 сохранить? Не проще время последнего сохранения файла посмотреть?
----- добавлено через ~4 мин. ----- и тогда уж сохранять как версии файлов %Имя файла%_%Дата и время бекапа%. Прошло то время давно, когда винчи было по 40мб) |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
Замечания к реализиции:
1. Уверены - что переменная Users1 не будет использована в каком нибудь стороннем лиспе, порушив работу автоматизации? 2. Много лишнего кода, дублирующего функционал самого VBA Код:
Код:
Код:
4. Если в файле нет изменений - аналогично? (см. ThisDrawing.Saved) 5. Я бы все таки делал бекап не на VBA, и реализовывал бы сохранение каждые n минут в формате %Имя файла%_%Дата и время% (т.е. замена стандартному автосохранению с осмысленными именами). |
|||
|
||||
Спасибо за критику.
По Users1 не смог найти другого варианта, как сохранить переменную в текущем сеансе акада. Вариант с (ThisDrawing.Saved) вероятно будет лучше. А вообще это все задумалось после случайного закрытия файла и отказа от сохранения (ошибочно) |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
По идее надо в событии перед закрытием файла скопировать текущее состояние чертежа во временный файл, при этом давая возможность пользователю дальше в штатном режиме получить запрос на сохранение файла и сделать выбор. В .Net это делается элементарно:
Код:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
Попробуйте временно
Код:
Код:
p.s. я бы не связывался с VBA в системе, работающей на событиях) Да и неправильная реализация получается у вас - человек хочет честно сохранить файл при закрытии, а прошло полчаса - и файл сохранен уже в другом месте. И при нажатии сохранить он будет обновлен в папке "e:\Temp", надо выбирать "сохранить как" и искать исходный файл. |
|||
|
||||
не работает даже вывод в консоль ThisDrawing.Utility.Prompt "Acad Startup Scripts Completed. !USERS1" & vbCrLf Видимо чертеж еще не успевает открыть ? И ещё. Уже в открытом чертеже пишу в переменную в одном макросе ThisDrawing.SetVariable "USERS1", Str(Time) Читаю в другом sysVarTime_open = ThisDrawing.GetVariable("USERS1") Все ок! выдает время. В консоли Autocad "!USERS1" выдает nul Я ожидал тоже получить время |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
В общем, примерно так код должен выглядеть. Разбирайтесь - что непонятно, смотрите на сайте Бушмана Андрея по ссылке из поста №2 от trir. И это надо обкрутить автозагрузкой и событиями создания/удаления документа - сейчас это вручную делается командами "SetControlEventDoc" и "ResetControlEventDoc". Все есть на том же сайте. И не страдайте фигней в VBA - он сам по себе глючный, чтобы в нем еще с событиями извращаться. VBA - язык программирования для Office.
Код:
Последний раз редактировалось Сергей812, 25.01.2018 в 15:36. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Цитата:
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
Ну и про идентификацию файла тоже не забывайте: если в проектах файлы называете однотипно, то вполне вероятно совпадение имен файлов из разных проектов с затиранием предыдущей копии в папке теневых копий. Проще всего создавать структуру папок, аналогичную структуре на сервере - это несколько строчек добавит в код. Естественно, не всю структуру папок сервера - а где только были измененные пользователем файлы.
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
грабли вы нашли очередные Зачем вам это время, когда нужно всего лишь проверять состояние двух флагов - доступен ли файл на запись и были ли изменения в файле?
----- добавлено через ~18 мин. ----- По сути, есть три связанные задачи: 1. Создание теневой копии файла на случай забывчивости сохранения. 2. Создание при сохранении пользователем вместо *.bak группы файлов с %Имя файла%_%Дата_время%.dwg. Чтобы в случае проблем с чертежом или не знающим чего само хочет руководством/заказчиком можно было всегда откатиться назад. 3. Подмена автосохранения опять же осмысленным %Имя файла%_%Дата_время%.dwg. Даже после скачка курса стоимость дискового пространства гораздо меньше стоимости работы проектировщиков, чтобы его экономить. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запрос имени редактировавшего при закрытии dwg файла | Raznouh | AutoCAD | 16 | 02.11.2015 05:02 |
Проблемный файл, не работает буфер обмена и сохранение файла | KOT404 | AutoCAD | 26 | 13.01.2014 07:58 |
Помогите отключить принудительное сохранение при закрытии файла! | Gizmo2k | AutoCAD | 7 | 27.07.2011 10:45 |
Как отключить автосохранение при закрытии файла? | fenix72 | AutoCAD | 2 | 25.10.2010 11:24 |
Как отключить создание каждый раз нового файла .bak при нажатии на кнопку "Сохранить" или при закрытии любого файла .dwg в Автокад 2008? | gve2005 | AutoCAD | 4 | 30.10.2009 10:30 |