Создать объект в AutoCad

Программирование на Visual Basic for Applications
NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Создать объект в AutoCad

Сообщение NicSoft » 30.12.2003 (Вт) 20:42

Имею такую беду: создаю из своей VB программы объект AutoCad, создаю в нём линии, тексты и т.д.
Далее появилась надобность изменить в AutoCad настройку "Oтoбpaжaть диaлoг OLE cвoйcтв" на False. Нашёл класс AcadPreferencesSystem и в нём свойство DisplayOLEScale, подозреваю, что это то, что мне нужно, но не могу инициализировать класс. На строку
Set objAPS = New AutoCAD.AcadPreferencesSystem
компилятор ругается что нет такого класса, тогда как
Dim objAPS As AutoCAD.AcadPreferencesSystem
принимает без проблем.
Может кто знает способ добратся до этого класса?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Экземпляры класса

Сообщение hCORe » 31.12.2003 (Ср) 13:13

Сначала создавай переменную, а потом экземпляр:
Код: Выделить всё
'объявим переменную
Dim objAPS As AutoCAD.AcadPreferencesSystem
'создадим экземпляр класса
Set objAPS = New AutoCAD.AcadPreferencesSystem
Моду создают модоки, а распространяют модозвоны.

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Не получается

Сообщение NicSoft » 01.01.2004 (Чт) 20:43

Именно так я и начал, но на строку:

Set objAPS = New AutoCAD.AcadPreferencesSystem

Ответ компилятора:
Invalid use of New keyword

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Dim... as New

Сообщение hCORe » 01.01.2004 (Чт) 21:03

Тогда:
Код: Выделить всё
Dim <имя переменной> as New <объект>

или:
Код: Выделить всё
Dim <имя переменной> as Object
Set <имя переменной>= New <объект>
Моду создают модоки, а распространяют модозвоны.

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Не помогло

Сообщение NicSoft » 02.01.2004 (Пт) 0:56

Дело в том, что после применения ключевого слова NEW класс AcadPreferencesSystem исчезает как призрак :( , впрочем как и многие другие из AutoCad, поэтому линии и тексты я создавал как
Set objLine = objSpace.AddLine(varStart, varEnd)
Set objText = objSpace.AddText(strName, varStart, intFontSize)
но с AcadPreferencesSystem таким способом тоже не выходит.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Интерфейсы

Сообщение hCORe » 02.01.2004 (Пт) 13:32

Высказываю предположение: может быть он с VB несовместим (ну, типы данных несовместимые) или просто защищен. Бывает и такое. Как-то наткнулся на прикольный класс, а на попытку использовать одно из событий VB писал: "Function or interface marked as restricted, or it uses an automation type not supported by Visual Basic". Пришлось использовать другие пути :cry:
Моду создают модоки, а распространяют модозвоны.

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Не судьба

Сообщение NicSoft » 02.01.2004 (Пт) 15:01

Ну и ладно. Он мне конечно не позарез нужен, просто хотелось придать программе элемент завершенности и неглюкавости.
Спасибо за поддержку.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 02.01.2004 (Пт) 20:06

Всегда пожалуйста :!: :!: :!:
Моду создают модоки, а распространяют модозвоны.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.01.2004 (Сб) 7:27

Господа, не страдайте фигнёй :wink:
Отсутствие класса в списке после New означает, что он Public non createable, то есть нужно сначала создать некий главный объект (который как раз Public creatable), а потом с помощью методов сего объекта получить экземпляр желаемого объекта.
Посмотрите там, какие методы каких объектов имеют тип возвращаемого значения AcadPreferencesSystem?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Может я чего недопонял

Сообщение NicSoft » 04.01.2004 (Вс) 1:51

Класс AcadPreferencesSystem не возвращает никакого значения, он содержит опции вкладки окна диалога (всего девять свойств, одно из которых - DisplayOLEScale). Я просмотрел все методы всех классов AutoCAD но не нашёл такого, который может создать экземпляр AcadPreferencesSystem. Может, конечно, по неопытности. :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.01.2004 (Вс) 9:53

Есть вероятность, что возвращаемое значение имеет тип Object. Тогда только чтением мануала :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SVL
Обычный пользователь
Обычный пользователь
 
Сообщения: 97
Зарегистрирован: 19.12.2002 (Чт) 11:37
Откуда: Russia

Сообщение SVL » 12.01.2004 (Пн) 17:09

Попробуй так:
Код: Выделить всё
Dim AcadPref as object
dim acadapp15 as object
Set acadapp15 = CreateObject("AUTOCAD.APPLICATION.15")
Set ACADPref = acadapp15.ActiveDocument.Application.preferences.System
ACADPref.DisplayOLEScale=False

А вообще в AutoCad есть прекрасная справочная система, в том числе по VBA. Там все подробно объяснено.

NicSoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 05.04.2003 (Сб) 18:51
Откуда: Егорьевск

Есть в жизни счастье

Сообщение NicSoft » 15.01.2004 (Чт) 20:29

Попробуй так:
Код:
Dim AcadPref as object
dim acadapp15 as object
Set acadapp15 = CreateObject("AUTOCAD.APPLICATION.15")
Set ACADPref = acadapp15.ActiveDocument.Application.preferences.System
ACADPref.DisplayOLEScale=False

Всё прокатило. Без шума и пыли.
Огромное спасибо!!!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

    TopList