Тема: Управление свойствами главного окна AutoCAD при раннем связывании
Всем доброго времени суток!
Передо мной, была поставлена задача, реализовать на VB пользовательское приложение с использованием раннего связывания, в котором по ходу сценария необходимо управлять видимостью AutoCAD на экране, изменять высоту/ширину главного окна приложения, положение левого/верхнего края окна приложения. Управлять свойствами окна приложения надо, используя интерфейс API COM. Вроде бы все просто, но в процессе работы столкнулся с тем, что, например, при раннем связывании после установки Application.Visible = False AutoCAD остается виден на экране, а после установки Application.Visible = True – запускается второй экземпляр AutoCAD.
При использовании позднего связывания все работает как и планировалось, т.е. после установки Application.Visible = False AutoCAD ‘исчезает’ с экрана, а после установки Application.Visible = True – появляется, и он остается в единственном числе.
Набросал простейшие тесты свойства Application.Visible, управляющего видимостью окна приложенияс при раннем и позднем связывании, которые создают описанные ваше ситуации.
<CommandMethod("TestComVisibleEarly")> _ Public Sub TestComVisibleEarly() '' При раннем связывании после установки app.Visible = False AutoCAD остается виден на экране, '' а после установки app.Visible = True – запускается второй экземпляр AutoCAD. Me.msgDoc.Editor.WriteMessage(vbLf & " Тест свойства Application.Visible, управляющего видимостью окна приложенияс при раннем связывании") Dim app As AcadApplication = CreateObject("AutoCAD.Application") app.Visible = False Dim answer As String = Nothing answer = MsgBox("Если в данный момент окно приложения на экране не видно - ответьте 'Да', в противном случае 'Нет'.", vbYesNo + vbQuestion, "Подтверждение результата") If answer = vbYes Then Me.msgDoc.Editor.WriteMessage(vbLf & " =====> Окно приложения на экране НЕ видно.") Else Me.msgDoc.Editor.WriteMessage(vbLf & " =====> Окно приложения на экране осталось видимым.") End If app.Visible = True End Sub
Function GetApplicationDispatch() GetApplicationDispatch = Application.AcadApplication() End Function <CommandMethod("TestComVisibleLater")> _ Public Sub TestComVisibleLater() Me.msgDoc.Editor.WriteMessage(vbLf & " Тест свойства Application.Visible, управляющего видимостью окна приложенияс при позднем связывании") Dim app As Object = GetApplicationDispatch() app.Visible = False Dim answer As String answer = MsgBox("Если в данный момент окно приложения на экране не видно - ответьте 'Да', в противном случае 'Нет'.", vbYesNo + vbQuestion, "Подтверждение результата") If answer = vbYes Then Me.msgDoc.Editor.WriteMessage(vbLf & " =====> Окно приложения на экране НЕ видно.") Else Me.msgDoc.Editor.WriteMessage(vbLf & " =====> Окно приложения на экране осталось видимым.") End If app.Visible = True End Sub
Аналогичная ситуация при использовании свойств Application.Height, Application.WindowLeft при раннем связывании. При позднем связывании все работает нормально.
Коллеги, подскажите, что надо сделать, чтобы при раннем связывании главное окно AutoCAD, как положено, становилось невидимым при Application.Visible = False и не продились экземпляры AutoCAD.
Заранее благодарю за помощь.
С уважением,
Андрей