Тема: Можно ли "добраться" до "Свойств рисунка"?
В AutoCad Файл->Свойства рисунка на вкладке <Документ> есть поля для ввода имени, темы, автора, комментария. Можно ли до них "добраться" из кода на VBA?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Можно ли "добраться" до "Свойств рисунка"?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
В AutoCad Файл->Свойства рисунка на вкладке <Документ> есть поля для ввода имени, темы, автора, комментария. Можно ли до них "добраться" из кода на VBA?
Что такое поиск знаете?
https://www.caduser.ru/forum/topic6040.html
Спасибо за ссылку. Но у меня возникла следующая проблема:
Код
nameRecord = "DWGPROPS" Set propsRecord = ThisDrawing.Dictionaries(nameRecord)
выдает ошибку Method Failed. Я попробовал в командной строке ввести следующую команду (setq listDwgProps (dictsearch (namedobjdict) "DWGPROPS")). Возвращаемый ею результат - nil. Почему такое может быть?
Очевидно потому, что Вы (или кто-то) в данном конкретном файле этот словарь "убил".
Попробуйте поэкспериментировать в новом, "чистом" файле.
Какая версия Автокада?
Описанные выше методы подходят для Acada 2000-2002.
Для А2004 это не пройдет, нужно использовать
Set propsRecord = ThisDrawing.SummaryInfo
В новом "чистом" файле также может не быть словаря - зависит от какого предка он рожден.
Словарь появляется или после первого вызова команды DWGPROPS или после его программного создания.
Программно словарь можно создать и на VBA - примеры в HELP. Но на VBA (и LISP черех ActiveX) это неудобно, так как старый словарь затирается, а обычно надо и сохранить какие-то старые свойства, и изменить, и добавить. LISP через entmakex позволяет это делать гибко (можно менять отдельные, ActiveX меняет все).
Читать свойства проще через LISP (dictsearch), но гибсче через ActiveX, так как можно прочитать свойства из не открытого файла.
В AutoCAD 2004 словарь свойств точно также остался внутри рисунка, на том же месте. Функция SummaryInfo используется операционной системой. В NTFS она выдаст много информации, в том числе дублируя свойства, при FAT32 не покажет ничего.
Зависит также от наличия самого AutoCAD. Если AutoCAD установлен, Windows через COM-интерфейсы запрашивает у него информацию о файле и показывает. Так что когда применяете SummaryInfo из AutoCAD, то получаете через посредников ту же информацию (возможно искаженную), которую можно взять напрямую.
> serg
В объектной модели AutoCAD 2004 появился недокументированный объект SummaryInfo как свойство рисунка. Кое-что о нем я привел в книге "AutoCAD 2004: разработка приложений и адаптация".
> ShaggyDoc
Что-то вы тут воды много налили.
В 2004 выражение
(dictsearch (namedobjdict) "DWGPROPS")
выдаст вам Nil при любом раскладе, вне зависимости записаны свойства в рисунок или нет. Поэтому для извлечения свойст рисунка, можно добраться, как указал Н.Н.Полещук, через объект Автокада SummaryInfo. К Windows-скому свойству SummaryInfo она не имеет никакого отношения.
Версия AutoCad -2002. Как я понял, автоматически словарь создается только после вызова команды dwgprops и заполнения какого-нибудь свойства(например, комментария) вручную. Буду смотреть, как создать словарь программно. Спасибо за ответы.
> Игорь
Мне NIL никогда не выдает, потому что я это предотвращаю.
Выдаст NIL в любом AutoCAD, в котором программист не позаботится о создании словаря.
"Вода" налита для тех, кто думает, что в ThisDrawing.SummaryInfo содержится информация, создаваемая какими-то собственными процедурами.
AutoCAD просто обращается к собственном открытому документу как к файлу. Объект ввели дополнительно для удобства, потому что добираться до SummaryInfo через API сложно. Autodesk все более сближается с Microsoft, а та требует, чтобы сойства хранили стандартно. Только поздно спохватились.
Словарь появляется или после первого вызова команды DWGPROPS или после его программного создания.
Простите не допонял. Если я создаю новый файл на основе шаблона, в котором этот словарь не был специально удален, то во всех таких файлах словарь свойств имеет место быть. Или я не прав?
> bender
Если свойства были в шаблоне, то да. В файле, созданном на основе шаблона со свойствами будут эти свойства. Это удобно.
У 2004 такие особенности:
- Если в него загружается файл, созданный в 2002, то прежние свойства из словаря копируются и используются в диалоге DWGPROPS, а прежний словарь не удаляется.
- Сохраняются свойства файла 2004 не в словаре (тут я был не прав, написав "на том же месте"). Словарь-то на том же месте, но стандартный диалог уже из него не читает.
- Свойства в 2004 действительно читаются функцией WinAPI StgOpenStorageEx, а хранятся в "Windows 2000 Structured Storage", рекомендованном Microsoft для стандартного хранения таких данных.
- Объект SummaryInfo работает именно через WinAPI, а не чтением внутренних, никому более не известных кодов. Это хорошо, но плохо то, что свойства, измененные пользователем в диалоге, объект SummaryInfo возвращает БЕЗ изменений (во всяком случае, не всегда видит изменения) до того, как файл не будет закрыт и снова открыт. Это очень плохо, если надо программно контролировать какие-то свойства.
- Если сохранить файл 2004 в формат 2000, то измененные свойства вновь окажутся в словаре. Это хорошо.
есть вопрос, как установить иконку на файл через командную строку
> Lexa
Что то я совсем не понял вопроса иконку на файл, которая отображается в браузере? типа к файлу *.txt назначить иконку ворда? если вопрос в этом, то все это делается через реестр.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Можно ли "добраться" до "Свойств рисунка"?
Форум работает на PunBB, при поддержке Informer Technologies, Inc