Тема: AcDbTable стиль строк

Собственно вопрос, как изменить стиль первой и второй строки с "название" и "заголовок" на "Данные"
Пробовал AcDbTable::suppressTitileRow и AcDbTable::suppressHeaderRow не помогает.

Заранее спасибо.

Re: AcDbTable стиль строк

А теперь все тоже самое, но поподробнее. С картинками, кодом и т.д. Если конечно рассчитываешь на помощь.

(изменено: Геннадий, 2 апреля 2010г. 07:06:07)

Re: AcDbTable стиль строк

В автокаде при добавлении таблицы можно выбрать стиль ячеек: стиль ячеек первой строки, стиль ячеек второй строки и стиль ячеек остальных строк. По умолчанию для первой строки стоит "Название", для второй - "Заголовок", для остальных - "Данные". Автокад 2010. Как тоже самое сделать в ObjectARX?

Зарание спасибо!

Re: AcDbTable стиль строк

Не это: AcDbTable::setCellStyle  :?:

Re: AcDbTable стиль строк

Александр Ривилис пишет:

Не это: AcDbTable::setCellStyle

Пробовал, получаю код ошибки eNotApplicable

(изменено: Александр Ривилис, 2 апреля 2010г. 12:47:05)

Re: AcDbTable стиль строк

Код в студию. Надоело гадать на кофейной гуще.

static void ArxTestTESTTABLE(void)
{
  // Add your code for command ArxTest.TESTTABLE here
  ads_name en; ads_point p;
  if (acedEntSel(_T("\nВыберите таблицу: "),en,p) == RTNORM) {
    AcDbObjectId eid; acdbGetObjectId(eid,en);
    AcDbObjectPointer<AcDbTable> pTable(eid,AcDb::kForWrite);
    if (pTable.openStatus() == Acad::eOk) {
      AcString styleData;
      AcDbObjectPointer<AcDbTableStyle> pTableStyle(pTable->tableStyle(),AcDb::kForRead);
      if (pTableStyle.openStatus() == Acad::eOk) {
        AcStringArray styles;
        int nStyles = pTableStyle->getCellStyles(styles);
        for (int i = 0; i < nStyles; i++) {
          acutPrintf(_T("\nStyle[%d]=%s"),i,styles[i].kTCharPtr());
        }
        styleData = styles.last();
      }
      Acad::ErrorStatus es;
      if (!styleData.isEmpty()) {
        for (int i=0; i < pTable->numColumns(); i++)  {
          // acutPrintf(_T("\npTable->cellStyle(0,%d)=%s"),i,pTable->cellStyle(0,i));
          // acutPrintf(_T("\npTable->cellStyle(1,%d)=%s"),i,pTable->cellStyle(1,i));
          if ((es = pTable->setCellStyle(0,i,styleData)) != Acad::eOk) {
            acutPrintf(_T("\npTable->setCellStyle(0,%d,styleData) = %s"),i,acadErrorStatusText(es));
          }
          if ((es = pTable->setCellStyle(1,i,styleData)) != Acad::eOk) {
            acutPrintf(_T("\npTable->setCellStyle(1,%d,styleData) = %s"),i,acadErrorStatusText(es));
          }
        }
        pTable->generateLayout();
      }
    }
  }
}

Re: AcDbTable стиль строк

Александр Ривилис,
Спасибо за помощь, но у меня все равно не работает. Попробовал ваш код, все проходит нормально, результат eOk, но стиль строк все равно не меняется, как были первая - название, вторая - заголовок так и остались.

У себя я делал вот так

AcDbTable *pTable = new AcDbTable;

        if (!PostToDB(pTable)) return;

        pTable->setPosition(AcGePoint3d(0,0,0));
        pTable->setWidth(100);
        pTable->setHeight(30);

        pTable->insertRows(1,10,10);

        Acad::ErrorStatus es;
        es = pTable->setCellStyle(0,0,_T("_DATA"));
        if (es!= Acad::eOk) 
        {
            acutPrintf(_T("\npTable->setCellSt yle = %s"),acadErrorStatusText(es));
        }

        pTable->close();

получаю pTable->setCellSt yle = eNotApplicable

Re: AcDbTable стиль строк

Я проверял свой код в AutoCAD 2008 English на таблице "по умолчанию" (т.е. я ее не модифицировал никакие значения в диалоге создания таблицы). Не исключаю, что в 2010 есть какой-то глюк. Что касается твоего кода, то нужно как минимум таблице присвоить стиль таблиц, т.к. setCellStyle должна проверить что в стиле таблицы есть соответствующий стиль ячейки.