Изменение текста mleader

Автор Тема: Изменение текста mleader  (Прочитано 6399 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн VtАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Изменение текста mleader
« : 05-10-2018, 10:50:39 »
Вопрос по mleader - я пытаюсь изменить текст мультивыноски но он остается прежним. Почему так происходит?
Код - C++ [Выбрать]
  1. bool MleaderController::setTextMessage(const AcDbObjectId &MLeaderId, const CString &textMessage)
  2. {
  3.         AcDbObjectPointer<AcDbMLeader>pEnt(MLeaderId, AcDb::kForWrite);
  4.         if (pEnt.openStatus() != Acad::eOk) return false;
  5.         pEnt->mtext()->setContents(textMessage.GetString());
  6.         return true;
  7. }
  8.  

Отмечено как Решение Vt 05-10-2018, 12:58:25

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изменение текста mleader
« Ответ #1 : 05-10-2018, 12:27:30 »
Как-то так (не проверял):
Код - C++ [Выбрать]
  1. bool MleaderController::setTextMessage(const AcDbObjectId &MLeaderId, const CString &textMessage)
  2. {
  3.         AcDbObjectPointer<AcDbMLeader>pEnt(MLeaderId, AcDb::kForWrite);
  4.         if (pEnt.openStatus() != Acad::eOk) return false;
  5.         AcDbMText *pMtext = pEnt->mtext();
  6.         if (pMtext) {
  7.            pMtext->setContents(textMessage.GetString());
  8.            pEnt->setMText(pMtext);
  9.            delete pMtext;
  10.         }
  11.         return true;
  12. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VtАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Изменение текста mleader
« Ответ #2 : 05-10-2018, 13:01:24 »
Как-то так (не проверял):
Код - C++ [Выбрать]
  1. bool MleaderController::setTextMessage(const AcDbObjectId &MLeaderId, const CString &textMessage)
  2. {
  3.         AcDbObjectPointer<AcDbMLeader>pEnt(MLeaderId, AcDb::kForWrite);
  4.         if (pEnt.openStatus() != Acad::eOk) return false;
  5.         AcDbMText *pMtext = pEnt->mtext();
  6.         if (pMtext) {
  7.            pMtext->setContents(textMessage.GetString());
  8.            pEnt->setMText(pMtext);
  9.            delete pMtext;
  10.         }
  11.         return true;
  12. }
Ага в описании функции mtext() нашел:
 Gets a copy of mleader’s mtext content
Не подумал сразу что копия возвращается - думал просто указатель