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

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

VBA отследить изменения в положении блока (примитива)

Ответ
Поиск в этой теме
Непрочитано 07.02.2011, 12:44 #1
VBA отследить изменения в положении блока (примитива)
sergtranes
 
проектирование "чистых комнат"
 
Хайфа
Регистрация: 07.02.2011
Сообщений: 51

Уважаемые профи,

как из программы отследить изменения в положении блока, его атрибутов, параметров динамического блока - необходимо выполнить опред. действия после ?

как отловить Event MODIFIED

буду вам очень благодарен
Просмотров: 2907
 
Непрочитано 07.02.2011, 13:28
#2
Сергей Богатов


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


WithEvents может помочь.
WithEvents Optional. Keyword specifying that varname is an object variable used to respond to events triggered by an ActiveX object. WithEvents is valid only in class modules. You can declare as many individual variables as you like using WithEvents, but you can't create arrays with WithEvents. You can't use New with WithEvents.

Но может лучше двигать(модифицировать) блок не штатной командой, а какой нибудь своей. Надёжней будет
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Автор темы   Непрочитано 07.02.2011, 14:47
#3
sergtranes

проектирование "чистых комнат"
 
Регистрация: 07.02.2011
Хайфа
Сообщений: 51


двигать или менять геометрию (растягивать) должен чертежник - прога должна корректировать другие примитивы
почитал о WithEvents в хелпе - немного сложно. м.б. кто-нибудь может дать примерчик на "движение" ?
sergtranes вне форума  
 
Непрочитано 07.02.2011, 16:42
#4
Сергей Богатов


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


где угодно в модуле
Код:
[Выделить все]
Dim X As New EventClassModule
Sub acadstartup()
Call InitializeEvents
End Sub
 
Sub InitializeEvents()
Set X.App = ThisDrawing.Application
End Sub
в классе EventClassModule

Код:
[Выделить все]
Public WithEvents App As AcadApplication
Private Sub App_AppActivate()
MsgBox "Привет друг"
End Sub
может поможет?
__________________
Я-проектировщик бывший проектировщик!
Сергей Богатов вне форума  
 
Автор темы   Непрочитано 07.02.2011, 16:50
#5
sergtranes

проектирование "чистых комнат"
 
Регистрация: 07.02.2011
Хайфа
Сообщений: 51


спасибо,
проверю - расскажу

не работает для моего класса.
хотел использовать для стандартного блока - не понятно как вставить в модуль станд класса это -

Public WithEvents blk As AcadBlockReference
Private Sub blk_Modified()
MsgBox "Привет друг"
End Sub

пример из хелпа даже не транслируется

Последний раз редактировалось sergtranes, 07.02.2011 в 22:22.
sergtranes вне форума  
 
Непрочитано 08.02.2011, 10:44
#6
Сергей Богатов


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


у меня работает... в Autocad 2009
но там нужно обязательно сделать

Код:
[Выделить все]
 
Dim X As New EventClassModule
 
.
.
 
Set X.App = ThisDrawing.Application
вместо App соответственно твой блок за которым ты хочешь "следить"
__________________
Я-проектировщик бывший проектировщик!

Последний раз редактировалось Сергей Богатов, 08.02.2011 в 10:52.
Сергей Богатов вне форума  
 
Автор темы   Непрочитано 08.02.2011, 11:26
#7
sergtranes

проектирование "чистых комнат"
 
Регистрация: 07.02.2011
Хайфа
Сообщений: 51


tak ?

EventClassModule - новый? его нужно создать?


в классе EventClassModule



Public WithEvents objBlock As AcadApplication
Private Sub App_AppActivate()
MsgBox "Привет друг"
End Sub

in module:

Dim objBlock As AcadBlockReference
.
.

Set x.objBlock=ThisDrawing.Application

????

Последний раз редактировалось sergtranes, 08.02.2011 в 11:33.
sergtranes вне форума  
 
Непрочитано 08.02.2011, 11:31
#8
Сергей Богатов


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


а причём здесь =ThisDrawing.Application ???

это в классе:
Public WithEvents objBlock As AcadApplication AcadBlockReference

типа этого в модуле:

Dim objBlock As AcadBlockReference уже не нужно

Код:
[Выделить все]
Set x.objBlock= ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "имяблока", 1#, 1#, 1#, 0)
или выбор уже созданного блока
__________________
Я-проектировщик бывший проектировщик!

Последний раз редактировалось Сергей Богатов, 08.02.2011 в 13:08.
Сергей Богатов вне форума  
 
Автор темы   Непрочитано 08.02.2011, 11:55
#9
sergtranes

проектирование "чистых комнат"
 
Регистрация: 07.02.2011
Хайфа
Сообщений: 51


esli я ставлю ето

Public WithEvents objBlock As AcadBlockReference

в модуль програрммы то транслятор дает ошибку
"Only valis in object module."
но у меня нет модуля AcadBlockReference
????
sergtranes вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA отследить изменения в положении блока (примитива)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранение определения блока в отдельном файле. Динамические изменения вхождений hwd Динамические блоки 25 18.10.2011 15:52
VBA програмный доступ к параметрам динамического блока (чтение/установка) sergtranes Программирование 6 07.02.2011 17:16
Замена одного блока на другой средствами VBA НовичOK Программирование 7 25.11.2010 16:48
VBA. Редактирование аттрибутов блока. Bart Программирование 32 04.12.2009 13:59
Изменения блока, атрибутов блока сразу в нескольких файлах andery AutoCAD 7 03.04.2009 17:07