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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA и LockDocument как заблокировать документ ?

VBA и LockDocument как заблокировать документ ?

Ответ
Поиск в этой теме
Непрочитано 22.04.2024, 09:20 #1
VBA и LockDocument как заблокировать документ ?
baksconstructor
 
Регистрация: 05.11.2014
Сообщений: 944

В VBA необходимо сделать доступ к второму документу без его активации, но все команды начинают ужасно тормозить.
Оказалось что при таком действии нужно блокировать документ.
В .net есть для этого LockDocument
Но VBA нет такого.

Отсюда вопрос - как в VBA заблокировать документ ?
Просмотров: 2423
 
Непрочитано 22.04.2024, 11:33
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


а в лиспе можно заблокировать документ? там доступ к неактивному документу через другой механизм идет, насколько помню.
Сергей812 вне форума  
 
Непрочитано 22.04.2024, 12:11
#3
Кулик Алексей aka kpblc
Moderator

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


Не очень понял, какие команды при работе не в текущем документе.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.04.2024, 12:26
#4
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Не очень понял, какие команды при работе не в текущем документе.
Любые.
Например Selection.Select
Всё работает, но мелькает окно видимого документа и всё тормозит, потому что нет этого :

https://help.autodesk.com/view/OARX/...E16BFDD&v=2024
baksconstructor вне форума  
 
Непрочитано 22.04.2024, 12:30
#5
Кулик Алексей aka kpblc
Moderator

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


А может стоит открывать документ через ObjectDBX ? Ну или по крайней мере попробовать
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.04.2024, 12:53
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


просто для информации небольшой офтопик:

Когда в том же экселе (для которого VBA роднее некуда) работаем с группами ячеек типа операций сортировки или изменения диапазона: Если не сделаешь перед этим документ и лист активным, то результаты могут быть самые плачевные - от артефактов накладывания изображений разных листов до падения экселя в целом. Но там можно в коде "замораживать" перерисовку приложения, невидимо для пользователя временно переключить книгу и лист и потом обратно все вернуть. Тогда работает стабильно.
Сергей812 вне форума  
 
Автор темы   Непрочитано 22.04.2024, 14:07
#7
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Но там можно в коде "замораживать" перерисовку приложения, невидимо для пользователя временно переключить книгу и лист и потом обратно все вернуть.
Вот как раз LockDocumen это и делает.
baksconstructor вне форума  
 
Непрочитано 22.04.2024, 14:34
| 1 #8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Вот как раз LockDocumen это и делает.
разве? Блокировка - это когда во избежание конфликтов одновременных записей и чтений одного ресурса в памяти разными процессами вводится механизм "притормаживания" выполнения остальных процессов, не успевших первыми заблочить разделяемый ресурс. В данном случае разделяемым ресурсом является БД чертежа - и блокировка вводится для сохранения целостности и связанности БД чертежа.

----- добавлено через ~1 мин. -----
p.s. На форуме Аутодеска человек уже 20 лет ждет ответа на этот вопрос)
Сергей812 вне форума  
 
Непрочитано 22.04.2024, 16:05
#9
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Offtop: наглядный пример, почему рано или поздно люди переходят с вба на что то, что развивается и не стоит на месте.
Boxa вне форума  
 
Непрочитано 23.04.2024, 00:20
#10
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от baksconstructor Посмотреть сообщение

Отсюда вопрос - как в VBA заблокировать документ ?
Никак. А даже если бы такая возможность была, то это никак не увеличило бы быстродействие. В VBA блокировка происходит автоматически (как и в VisualLisp)

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Например Selection.Select
Всё работает, но мелькает окно видимого документа
И в ObjectARX и в AutoCAD .NET API аналог Select работает только в активном документе. Поэтому очевидно, что для работы в VBA необходимо активировать документ, в котором производится выбор.

----- добавлено через ~7 мин. -----
Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Вот как раз LockDocumen это и делает.
Нет конечно.
Александр Ривилис вне форума  
 
Непрочитано 23.04.2024, 02:53
#11
Автон

СЦБ
 
Регистрация: 09.03.2006
Сообщений: 89


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А может стоит открывать документ через ObjectDBX ? Ну или по крайней мере попробовать
Можно получить данные из файла через ObjectDBX, не открывая сам документ в редакторе.
Примерно так:

Код:
[Выделить все]
Dim oDbx As AxDbDocument 

Set oDbx = GetInterfaceObject("ObjectDBX.AxDbDocument." & Left(ThisDrawing.GetVariable("acadver"), 2))

oDbx.Open FileName

'Set oBlocks = oDbx.Blocks 
'Set oModelSpace =  oDbx.ModelSpace
Но для этого нужно через Tools-References подключать библиотеку Autocad/ObjectDBX Common [Номер версии] Type Library
И для каждой версии Autocad она своя, что не добавляет удобства, зато работает намного быстрее, чем открывать файл.
Автон вне форума  
 
Автор темы   Непрочитано 23.04.2024, 06:43
#12
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
то это никак не увеличило бы быстродействие
Без этого всё работает в10 раз медленнее, с блокировкой проблем нет.
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
В VBA блокировка происходит автоматически
Только в активном документе, в неактивном не происходит.
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
аналог Select работает только в активном документе. Поэтому очевидно, что для работы в VBA необходимо активировать документ, в котором производится выбор.
Нет. Прекрасно работает везде, и в неактивном и активном.
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Нет конечно.
Да, конечно. Для этого оно и создано. И справке написано что нужно его использовать для этого.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Автон Посмотреть сообщение
Можно получить данные из файла через ObjectDBX
Не вариант, слишком ограничено.
baksconstructor вне форума  
 
Непрочитано 23.04.2024, 12:50
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Да, конечно. Для этого оно и создано. И справке написано что нужно его использовать для этого.
в справке для VBA/ActiveX? Вы берете справку для ObjectARX (ну и обертки над ним в виде .Net) и пытаетесь как-то применить к VBA.
Сергей812 вне форума  
 
Непрочитано 25.04.2024, 17:44
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Да, конечно. Для этого оно и создано. И справке написано что нужно его использовать для этого.
Приведите ссылку на этот фрагмент справки (или цитату).
Вот описание lockDocument в ObjectARX: https://help.autodesk.com/view/OARX/...R__ACHAR__bool
Для AutoCAD .NET API оно еще короче и без расшифровки: https://help.autodesk.com/view/OARX/...t_LockDocument
Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Нет. Прекрасно работает везде, и в неактивном и активном.
Конечно, т.к. происходит временная активация неактивного документа.

P.S.: Всё остальное из вашего "опровержения" я не буду комментировать - нет вижу смысла тратить своё время...

----- добавлено через ~55 мин. -----
Цитата:
Сообщение от baksconstructor Посмотреть сообщение
Всё работает, но мелькает окно видимого документа и всё тормозит,
Именно это и означает, что происходит переключение документов (активизация другого документа, и потом возврат к предыдущему).
Что касается временной блокировки изображения, то для этой цели в ObjectARX есть следующие функции:
acedUpdateDisplayPause - блокировка/разблокировка обновления дисплея
acedIsUpdateDisplayPaused - проверка статуса блокировки обновления дисплея
acedUpdateDisplay - обновление дисплея

Аналога в VBA нет. В AutoCAD .NET API аналога тоже нет, но можно вызвать через P/Invoke

Последний раз редактировалось Александр Ривилис, 25.04.2024 в 18:50.
Александр Ривилис вне форума  
 
Непрочитано 26.04.2024, 19:06
#15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


хотя бы буферизуйте данные, чтобы не обращаться каждый раз ко второму "фоновому" чертежу - пакетно "сграбили" данные в память VBA кода, пакетно применили необходимые изменения.
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA и LockDocument как заблокировать документ ?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конкретный документ регламентирующий классификацию высот деревьев. m.marin Поиск литературы, чертежей, моделей и прочих материалов 5 31.03.2023 15:01
Ищу документ с рекомендациям по величинам рисок болтовых соединений в конструкциях опор ЛЭП Ifclissium Поиск литературы, чертежей, моделей и прочих материалов 0 07.08.2019 09:59
Какой документ в Беларуси регламентирует защитный слой для дорожных плит? petia Железобетонные конструкции 0 18.11.2015 10:09
Нужны ли исполнительные схемы как подтверждающий документ при демонтаже металлоконструкций Wintersson Поиск литературы, чертежей, моделей и прочих материалов 11 17.02.2014 19:22
Есть ли такой нормативный документ? Eugene84 Поиск литературы, чертежей, моделей и прочих материалов 9 04.12.2010 23:30