Разбираюсь с технологией ActiveX, помогите понять что делаю не так
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Разбираюсь с технологией ActiveX, помогите понять что делаю не так

Разбираюсь с технологией ActiveX, помогите понять что делаю не так

Ответ
Поиск в этой теме
Непрочитано 17.12.2010, 17:25 #1
Разбираюсь с технологией ActiveX, помогите понять что делаю не так
Shraybicus
 
Регистрация: 05.12.2010
Сообщений: 104

Здравствуйте!

Вот разбираюсь в технологии ActiveX. Создал блок, находится в приложенном файле. Блок имеет один атрибут в правом нижнем углу. Хочу для начала прочитать этот атрибут. Пишу следующий код на Lisp'е.

Код:
[Выделить все]
(vl-load-com)
(setq obj (vlax-ename->vla-object (car (entsel))))
;;; #<VLA-OBJECT IAcadBlockReference 09edc614>

(setq ar-atr (vla-GetAttributes obj)) ; получение массива атрибутов
;;; #<variant 8201 ...>

(vlax-safearray->list (vlax-variant-value ar-atr))
; вычисление значения варианта и чтение массива
Получаю строку:
; ошибка: ActiveX Server возвратил ошибку: Неверный индекс

Подскажите пожалуйста, что не правильно?
Просмотров: 3180
 
Непрочитано 17.12.2010, 17:43
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Все правильно. Возможно в блоке нет атрибутов или атрибут постоянный. Вот готовая ф-ция
Код:
[Выделить все]
(defun get-all-atts (obj)
  (if (and obj
           (vlax-property-available-p obj 'Hasattributes)
	   (eq :vlax-true (vla-get-HasAttributes obj))
	)
    (vl-catch-all-apply
      (function
	(lambda	()
	  (mapcar (function (lambda (x)
			      (cons (vla-get-TagString x)
				    (vla-get-TextString x)
			      )
			    )
		  )
		  (append (vlax-invoke obj 'Getattributes)
			  (vlax-invoke obj 'Getconstantattributes)
		  )
	  )
	)
      )
    )
  )
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 17.12.2010, 17:48
#3
Shraybicus


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


VVA, я эту функцию видел и пользуюсь. Но вот хочу сам разобраться как все работает.

А атрибут постоянный. так и есть.

Сделал атрибут установленный, теперь выдает следующее значение:
(#<VLA-OBJECT IAcadAttributeReference2 01f88b94>)

А как получить значение атрибута?

Последний раз редактировалось Shraybicus, 17.12.2010 в 17:55.
Shraybicus вне форума  
 
Непрочитано 17.12.2010, 20:28
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Shraybicus Посмотреть сообщение
А как получить значение атрибута?
важно еще знать к какому тэгу это значение относится. У тебя список vla-объектов. Применяешь к ним vla-get-TagString чтобы узнать имя тэга атрибута, vla-get-TextString - значение. Пишу без проверок
Код:
[Выделить все]
(foreach attrib (vlax-safearray->list (vlax-variant-value ar-atr))
(princ "\nТэг - ")(princ (vla-get-TagString attrib))
(princ "  Значение - ")(princ (vla-get-TextString attrib))
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Разбираюсь с технологией ActiveX, помогите понять что делаю не так

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите понять конструкцию ангара Alora Конструкции зданий и сооружений 7 22.03.2010 20:36
Помогите понять суть ошибки при армировании DAF Технология и организация строительства 15 15.03.2009 17:30
помогите понять почему в Scadе мне выдаёт геометрически изменяемая система nata85 SCAD 24 25.06.2008 17:18
Делаю дипломную помогите разобратся с лестницей нужны схемы Мешок с сахаром Архитектура 4 21.05.2007 19:43
переувлажнение помещений квартиры-- помогите понять причины tyoma Прочее. Архитектура и строительство 5 03.07.2006 23:00