|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
07.03.2021, 17:32 | #1 | |
Изменить текст в Mtext чертежа из другого приложения (VBA)
Регистрация: 07.03.2021
Сообщений: 10
|
||
Просмотров: 8299
|
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
изучайте - почти не отличается, если через COM в акад стучаться, только вместо ThisDrawing будет lCurrDoc
Код:
----- добавлено через ~6 мин. ----- строковое поле Handle является уникальным внутри одного файла для любого примитива на все время существования этого примитива - привязывайтесь смело через функцию HandleToObject |
|||
|
||||
Регистрация: 07.03.2021
Сообщений: 10
|
Спасибо, ну я уже нашел ранее около 10 примеров как открыть файл автокада в excel И с библиотекой в рефференсах тоже разобрался.
Вопрос - как связаться с определенным Mtext , одним из нескольких на странице . Какой у Mtext уникальный идентификатор (имя,или индекс или еще что.) И как туда,в уже существующий примитив, передать текст. По опыту программиста со стажем более 12 лет могу сказать,когда люди отправляют учить учебник, в котором (если присмотрется, ничего не говорится про уникальные идентификаторы Mtext по данному вопросу топика.) то они сами не знают ответа) |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
Цитата:
Цитата:
Offtop: p.s. хотя если взять отсчет "стажа" программирования с момента написания первой программы с практическим смыслом - то у меня уже почти четверть века оного |
|||
|
||||
Регистрация: 07.03.2021
Сообщений: 10
|
Нет, мне из экселя нужно передать в автокад ,в одно из полей (представим ,что таких полей в районе 7 на чертеже) типа Mtext новое текстовое значение.
Как мне указать ,что нужно передавать переменную именно в 3е поле, а не во второе или 1ое? Что является идентификатором уникальным Mtext на чертеже? Где этот идентификатор можно посмотреть (в свойствах элемента не нашел в автокаде.) Нужно не искать текст и потом менять его, нужно обратиться к одному из Mtext на чертеже и заполнить его определенными данными. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
Цитата:
ну а дальше дело техники - надо в экселе хранить два значение: содержимое мультитекста и хэндл примитива-мультитекста. Функцией HandleToObject получить по строке хэндла из первой ячейки примитив мультитекст и ему задать обновленное значение из второй ячейки. |
|||
|
||||
Регистрация: 18.12.2010
Сообщений: 5,057
|
Цитата:
https://habr.com/ru/post/271109/ |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
естественно, если объект скрыто пересоздается - то ему будет присвоен следующий свободный primary key в качестве хэндла.
и что делает .Net в теме про VBA-COM-Excel?) Не путайте людей, тем более на те же события через COM не подключиться без серьезных танцев с бубном. |
|||
|
||||
Регистрация: 07.03.2021
Сообщений: 10
|
Ребят, оставьте .Net мне для других целей. Для разработки клиентсерверных приложений в связке с SQL сервером И кстати я надеюсь никто не работает с VB.Net, так как язык не развивается , сейчас развивается либо C# на net платформе либо под web ASP.net
Давайте дожмем вставку текстовой переменной "тратата" в одно из полей проекта autocad ----- добавлено через ~19 мин. ----- Итак, я из excel подключаюсь к файлу Код:
|
|||
|
||||
Регистрация: 18.12.2010
Сообщений: 5,057
|
HandleToObject Method
Gets the object that corresponds to the given handle. Signature RetVal = object.HandleToObject(Handle) Object Document The object or objects this method applies to. Handle String; input-only The handle of the object to return. RetVal Object The object that corresponds to the given handle. Remarks This method can return only objects in the current document. |
|||
|
||||
Регистрация: 07.03.2021
Сообщений: 10
|
Куском кода бы помогли лучше. Объектная модель и обработка объектов в автокаде весьма отличается от остальных.
dwg1.zip Вот чертеж. На нем три поля типа Mtext. Как к примеру во второе поле Проверил вставить значение Иванов. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
Вариантов куча - напрямую в мультитекст писать, сделать свойства в чертеже и полями ссылки (что у вас в принципе и сделано), подшивки и т.д. Доделывайте свой вариант - почитайте в инете про AcadSummaryInfo и вперед. Хэндлы в данном случае вообще не нужны, как и знать порядок следования мультитекстов на чертеже.
----- добавлено через ~3 мин. ----- объектная модель каждого приложения отличается от других - было бы очень странно, если они совпадали бы даже у одного разработчика. Как понимаю, книжку из второго поста даже не пробовали открывать) |
|||
|
||||
Регистрация: 07.03.2021
Сообщений: 10
|
Открывал, посмотрел свойста объекта Mtext на 553 странице. Не нашел у него атрибутов типа text, либо методов типа setText, либо updateText.
Каждый отдельный объект (будь это поле в приложении excel,access,libreOffice. C# windows forms , JavaFx и прочие программы с GUI имеют либо свое системное имя ,которое можно задавать, либо свой уникальный индекс в коллекции элементов . ) И при открытии проекта, к уже созданным ранее полям можно обратиться по системному имени/индексу и изменить значение этого поля . В бейсике к примеру ИмяСлояИлиЛистаИлиФОрмы.имяКонтрола.Text = "Какое то новое значение". В Java к примеру нужно сначала выбрать этот обьект, при помощи findViewById(имя.объекта) и потом что то с ним делать. (Ну к примеру android java, или javaFx.) Последний раз редактировалось lalych, 08.03.2021 в 19:15. |
|||
|
||||
Регистрация: 07.03.2021
Сообщений: 10
|
Я не пишу в AC , мне нужно помочь одному человеку тупо вставить значения в три поля, и после теста и корректной работы VBA забыть об автокаде.
А как писать напрямую в мультитекст из VBA? ----- добавлено через ~35 мин. ----- Думаю что предпочтительней и проще писать напрямую. Только как обратиться напрямую к Mtext конкретному? У него индекс в коллекции есть какой либо? К примеру что тто типа такого ThisDrawing.Documents.Collection.Controls("Mtext")(0) = "какой то новый текст" |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,053
|
переверните на 554 страницу Чем TextString не устроил?
Цитата:
p.s. ThisDrawing.Documents - это даже не масло маслянное, Documents является контейнером для документа, а не наоборот. ----- добавлено через ~3 мин. ----- p.s.s. И сначала пробовать подключаться к запущенному акаду, и если неудачно - то тогда запускать новый экземпляр акада. Оперативка не резиновая) |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
изменить стиль MTEXT | Redya | AutoCAD | 31 | 20.10.2019 10:44 |
После редактирования mText происходит сдвиг и масштабирование чертежа | Vladimir Hotsanovich | AutoCAD | 3 | 27.01.2014 13:47 |
Создание нового слоя и перенос на них с другого чертежа. | Arraders | AutoCAD | 5 | 13.09.2013 10:59 |
при открытии чертежа (ACAD 64x 2008) на ACAD 32x 2008rus сбивается текст | Р.Д. | AutoCAD | 5 | 21.04.2010 23:49 |
Извлечение информации из Mtext (текст и координаты) в автоматическом режиме | Volod'ka | AutoCAD | 7 | 30.10.2009 23:33 |