EdwardSt Posted April 20 Report Share Posted April 20 В объектной модели приложения многие элементы представляют собой коллекции. Помимо различных специфических свойств они имеют похожие методы/свойства "Item" и "Count" с достаточно очевидной интерпретацией. Вместе с тем, доступ к некоторым из них вызвал затруднения. Поясню на примере. Небольшой фрагмент кода: (vl-load-com) (defun c:Example_Collection() (setq acadObj (vlax-get-acad-object) v acadObj) (print "Исследуем коллекцию Application") (vlax-dump-object v 'T) (setq v (vla-get-MenuBar v)) (print "Исследуем коллекцию MenuBar") (vlax-dump-object v 'T) ;(setq v (vla-item v 0));Такой доступ не прокатывает (setq v (vla-item v "Файл")) (print "Исследуем коллекцию пункта меню") (vlax-dump-object v 'T) ) Спойлер Все штатно и ожидаемо. Имеем свойство "menubar" - только для чтения. Спойлер с попутным сообщением Спойлер Т.е., средствами лиспа не удалось определить количество элементов Item. Не удается так же "добраться" до первого элемента меню через Item[0]. Теме не менее, удается извлечь Спойлер Все параметры с ошибкой сопровождаются с похожими сообщениями об ошибке (см.выше). На основании этого кейса хотелось бы получить ответы на следующие вопросы: Как средствами lisp все-таки получить значения свойств, для которых отображается "ошибка" в функции (vlax-dump-object и всех сходных с ней типа (vlax-get-... и (vlax-get-property... ? Как получить размерность массивов Item, когда свойство "Count" недоступно (см. вопрос1) ? Как получить список доступных наименований, с помощью которых можно получить доступ к Item["Имя"] ? Quote Link to comment Share on other sites More sharing options...
kpblc Posted April 20 Report Share Posted April 20 Работа с меню и его подэдементами в нанокад через лисп ИМХО не сделана. Да и через NET тоже. Лично мне не удалось динамически загрузить / выгрузить меню и вообще работать с ним чисто программно. Правда, я и нанокад знаю на уровне плинтуса. 16 минут назад, EdwardSt сказал: Как средствами lisp все-таки получить значения свойств, для которых отображается "ошибка" в функции (vlax-dump-object Никак ЯТД 16 минут назад, EdwardSt сказал: Как получить список доступных наименований, с помощью которых можно получить доступ к Item["Имя"] Попробуй сформировать список через vlax-for и анализируй уже его. Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted April 20 Author Report Share Posted April 20 8 минут назад, kpblc сказал: 25 минут назад, EdwardSt сказал: Как получить список доступных наименований, с помощью которых можно получить доступ к Item["Имя"] Попробуй сформировать список через vlax-for и анализируй уже его. Спасибо за совет. К сожалению, vlax-for неявно обращается к "Count" и выдает такое же сообщение об ошибке. Quote Link to comment Share on other sites More sharing options...
doctorraz Posted April 20 Report Share Posted April 20 12 минут назад, kpblc сказал: мне не удалось динамически загрузить / выгрузить меню и вообще работать с ним чисто программно. Однако))) Динамически работать с меню даже нанодев пока не умеет Quote Link to comment Share on other sites More sharing options...
kpblc Posted April 20 Report Share Posted April 20 15 минут назад, EdwardSt сказал: Спасибо за совет. К сожалению, vlax-for неявно обращается к "Count" и выдает такое же сообщение об ошибке. Ну ква, сорян, фигня получилась. 13 минут назад, doctorraz сказал: Динамически работать с меню даже нанодев пока не умеет Странно... Думаю, это просто сакральное знание, недоступное простым смертным До достижения нирваны плюсов Quote Link to comment Share on other sites More sharing options...
doctorraz Posted April 20 Report Share Posted April 20 Только что, kpblc сказал: Думаю, это просто сакральное знание, недоступное простым смертным Спойлер Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted April 20 Author Report Share Posted April 20 По-хорошему, если свойства должны быть недоступны, то они и должны быть в секции private, чтоб dump-object (и ему подобные) их не видели. Если уж отображаются в качестве публичных, то, как минимум (в случае RO - только для чтения), должны отображать значение. Непонятно, почему это не реализовано, вроде не должно вызывать сложности. Тем более, что доступ по имени (откуда бы его знать заранее!!), работает. Quote Link to comment Share on other sites More sharing options...
kpblc Posted April 20 Report Share Posted April 20 @doctorraz, я имею в виду программную работу. Без диалогов, движений мышью и прочей шушеры Quote Link to comment Share on other sites More sharing options...
doctorraz Posted April 20 Report Share Posted April 20 (edited) 20 минут назад, kpblc сказал: я имею в виду программную работу. Без диалогов, движений мышью и прочей шушеры офф я к тому, что если б дин подгрузка частичных адаптаций была возможно, то она б была реализована... насколько я понял, конфиг cfg загружается в память один раз и висит там статически.. cuix и xml может быть повторно прочитан по требованию... еще и умеет всякие Condition по условию и программно Спойлер <RibbonTabSelector Rule="editor:beedit" UID="ID_RBN_0537" Tabs="ID_TabBlockEditor"/> не отрицаю, что на плюсах возможно, что то можно сделать, но учитывая, что нк на с++ и разработчики этого не сделали... были причины... Edited April 20 by doctorraz Quote Link to comment Share on other sites More sharing options...
EdwardSt Posted April 20 Author Report Share Posted April 20 Все оказалось еще печальней. Доступ по имени к Item тоже не реализован (что, впрочем, логично, если нет сведений о "Count"). Т.е. Спойлер а Спойлер Но оказалось, что в качестве имени можно указать любую белиберду в кавычках и тоже будет выдан "как-бы" осмысленный результат. Т.е., метод таким образом не работает, но при этом не выдает ошибку, а возвращает такую же белиберду. Какой запрос - такой и ответ, но хотелось более внятного результата, хотя бы в виде ошибки на невалидный запрос. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.