Тема: Редактирование атрибутов блока с помощью формы

Создаю блоки с атрибутами с помощью формы.
При двойном клике по созданному блоку открывается КАДовская форма редактора атрибутов блока. Сильно хочется чтобы при аналогичном действии со стороны пользователя в случаи обращения к моим блокам (созданным с помощью этой формы)открывалась моя же форма, в которой я мог бы вносить изменения в атрибуты. Каким образом это осуществить?

Re: Редактирование атрибутов блока с помощью формы

На уровне идеи.
Код модуля ThisDrawing.
Не решен вопрос отмены автокадовской команды EATTEDIT.

Option Explicit
Dim flag As Boolean
Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
    If ((CommandName = "EATTEDIT") And (flag)) Then
        UserForm1.Show
        'MsgBox CommandName
    End If
End Sub
Private Sub AcadDocument_SelectionChanged()
    Dim pfs As AcadSelectionSet
    Dim bl As AcadBlockReference
    Dim MyBlockName As String
    MyBlockName = "Q-11"
    Set pfs = ThisDrawing.PickfirstSelectionSet
    On Error Resume Next
    Set bl = pfs.Item(1)
    flag = False
    If bl.Name = MyBlockName Then
        flag = True
    End If
End Sub

Re: Редактирование атрибутов блока с помощью формы

Спасибо!
Извините за наивный вопрос, но как мне его подключить/прописать и т.д., чтобы он стал активным?

Re: Редактирование атрибутов блока с помощью формы

Если речь идет о модуле ThisDrawing, то он автоматически включен в вашу программу, посмотрите...
Ну и конечно сама программа с формами должна быть загружена в AutoCAD.

Re: Редактирование атрибутов блока с помощью формы

Спасибо большое, разобрался!

Re: Редактирование атрибутов блока с помощью формы

Рано порадовался...
После работы с моей формой выплывает КАДовская форма редактора атрибутов блока. Можно что-нибудь сделать?
Иещё вопрос по AcadDocument_SelectionChanged. Не срабатывает, и открывается форма при обращении к любому блоку.

Re: Редактирование атрибутов блока с помощью формы

После работы с моей формой выплывает КАДовская форма редактора атрибутов блока. Можно что-нибудь сделать?

Я же говорил, что эта проблема не решена. Думаю можно сымитировать нажатие клавиши Esc.
Иещё вопрос по AcadDocument_SelectionChanged. Не срабатывает, и открывается форма при обращении к любому блоку.

Не может быть! Проверьте, насколько аккуратно вы скопировали и модифицировали под свои данные выложенный код.

Re: Редактирование атрибутов блока с помощью формы

attdia, attreq - поиграться не пробовал?

Re: Редактирование атрибутов блока с помощью формы

упс, сорри. Не прокатит, наверное.
Единственный вариант, который я предполагаю - прописывать собственные реакторы на двойной клик, объектный реактор на изменение атрибута и проч. геморройные вещи.

Re: Редактирование атрибутов блока с помощью формы

> Кулик Алексей aka kpblc
Ты как всегда прав - очень геморройные...

Re: Редактирование атрибутов блока с помощью формы

Добавил при закрытии формы SendKeys "{Esc}".
КАДовская форма редактора атрибутов блока не выплывает. Теперь остаётся победить ослеживание своих блоков.

Re: Редактирование атрибутов блока с помощью формы

> radan
Добавил при закрытии формы SendKeys "{Esc}".

Правильный ход.
Теперь остаётся победить ослеживание своих блоков.

А что тут "побеждать"? Добавьте к именам своих блоков свой же префикс и идентифицируйте их на здоровье.

Re: Редактирование атрибутов блока с помощью формы

А я всегда отключаю стандартные реакции автокада переменной DBLCLKEDIT
Только пользуюсь реактором не на начало команды а на двойной клик:
(приведу только логику без объявления переменных и т.д.)

Private Sub AcadDocument_BeginDoubleClick(ByVal PickPoint As Variant)
Set pfSS = ThisDrawing.PickfirstSelectionSet
If pfSS.Count = 1 Then
Set Obj = pfSS.Item(0)
   If Obj.ObjectName = "AcDbBlockReference" Then
      ThisDrawing.SendCommand "DBLCLKEDIT" & vbCr & "Off" & vbCr
      ****здесь код действий над объектом Obj***
      ThisDrawing.SendCommand "DBLCLKEDIT" & vbCr & "On" & vbCr
   End If
End if

При двойном клике на объекте, в PickfirstSelectionSet всегда будет находиться либо один объект на котором кликнули, либо несколько объектов предварительно выделенных вместе с ним. В моем варианте нештатный код будет выполняться только если был клик на одном объекте и если этот объект проходит по типу (у меня - это блоки, размеры и линии). В остальных вариантах работает штатный реактор.

Re: Редактирование атрибутов блока с помощью формы

Да, Крыс ранее как раз это и предлагал...
Но это не такой уж и гемор на самом деле))

Re: Редактирование атрибутов блока с помощью формы

> Сидор Лютый
А я всегда отключаю стандартные реакции автокада переменной DBLCLKEDIT
А я до этого не додумался.
С другой стороны, эта возможрость (переменная DBLCLKEDIT) появилась где-то на уровне ACAD2005-2006 и получается, что мой код более универсален.
Ну и еще ты заставил меня обратить внимание на проверку набора PickfirstSelectionSet.
Вот подправленный код:

Private Sub AcadDocument_SelectionChanged()
    Dim pfs As AcadSelectionSet
    Dim bl As AcadBlockReference
    Dim MyBlockName As String
    MyBlockName = "Q-11"
    Set pfs = ThisDrawing.PickfirstSelectionSet
    On Error Resume Next
    If pfs.Count = 1 Then
        Set bl = pfs.Item(0)
        flag = False
        If bl.Name = MyBlockName Then
            flag = True
        End If
    End If
End Sub

А геморройным делом я считаю попытки использовать в VBA реактор модификации объектов, когда-то накушался... Хотя, если управлять включением-отключением, может и удастся его выдрессировать.

Re: Редактирование атрибутов блока с помощью формы

Насколько мне припоминается, работа с dblclkedit сама по себе недостаточна (по крайней мере в лиспе); надо было дополнительно выгружать arx, отвечающий за обработку двойного клика. А это рушило AutoCAD напрочь (проверял на 2005 и 2006, как в последующих версиях - не знаю).

Re: Редактирование атрибутов блока с помощью формы

А геморройным делом я считаю попытки использовать в VBA реактор модификации объектов, когда-то накушался...

- ну с этим-то я согласен полностью! Я даже кушать не стал, только попробовал))