Отправлено: 02.09.05 09:26. Заголовок: Глюки при обработке события OnChange
Народ посмотрите, кто может. Тема такая: для работы программы требуется открытый инвенторовский чертёжный файл в котором есть хотя бы одно пользовательское свойство. Т.к. мы обрабатываем события то данную программу надо запускать из VB 6.0 (то я так просто напомнить)
Option Explicit Private WithEvents oChange As Inventor.DocumentEvents Private oApp As Inventor.Application
Private Sub Form_Load() Set oApp = GetObject(, "Inventor.Application") Set oChange = oApp.ActiveDocument.DocumentEvents End Sub Private Sub oChange_OnChange(ByVal ReasonsForChange As Inventor.CommandTypesEnum, ByVal BeforeOrAfter As Inventor.EventTimingEnum, ByVal Context As Inventor.NameValueMap, HandlingCode As Inventor.HandlingCodeEnum) Dim oDrawingDoc As DrawingDocument Set oDrawingDoc = oApp.ActiveDocument oDrawingDoc.PropertySets(4).Item(1).Value = "2"
End Sub
Глюк в строке: oDrawingDoc.PropertySets(4).Item(1).Value = "2" Просто помотрите у вас тоже в этом месте глюк или всё идёт нормально.
Здесь, видимо рекурсия в скрытой форме. Попытка изменения свойства документа вызывает эту же процедуру.
Вот, вероятно, более корректный код:
Dim oDrawingDoc As DrawingDocument Set oDrawingDoc = oApp.ActiveDocument With oDrawingDoc.PropertySets(4).Item(1) Select Case VarType(.Value) Case vbString: .Value = "2" Case vbBoolean: .Value = Not .Value Case vbCurrency: .Value = 2# Case vbInteger: .Value = 2 Case vbLong: .Value = 2 Case vbSingle: .Value = 2# Case vbDouble: .Value = 2# Case vbDate: .Value = Date Case Else
End Select End With
В данном случае, четвертое свойство, первый элемент у меня имеет тип даты
Этот код по событию изменения документа (в данном случае пользовательского свойства) работать не будет: действия внутри процедуры вызывают саму эту же процедуру.
Десять тысячь лет назад последний раз запускал VB..... Куда код вставлять надо. Если я всталяю в модуль проекта, то строка №2 рисует красным уже в модуле :(
Рекурсия? Хммм.... не думаю...кстати подставил твой код и та же самая "песня" Просто попробуй мой код и сообщи что он тебе выдаёт, может это у меня бейсик глючит. IgorT
зайди в Project\References найди Autodesk Inventor Object Library и всё запашет... до поры до времени
Я точно выяснил (по крайней мере, для себя так решил), что измение свойства документа вызывает событие onChange. Пройди по шагам. Замучаешься F8 нажимать. А начал я именно с твоего кода. После большого количества циклов Инвентор уходит в мир иной. Правда, перед этим предлагает послать сообщение его Родителям. Но это уже ничего не меняет.
А ведь ты прав на счёт рекурсии, признаю.... но почему бы ему просто не зациклится бы? Хммм.... Блин вот же лажа.... а всё так хорошо начиналось.... Благодарю за участие... Пойду на буржуйский форум, может они там что доброе скажут....
Все даты в формате GMT
3 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация вкл, правка нет