10/11/2015
Создание таблицы с содержимым только для чтения
Содержимое таблицы можно сделать с признаком «только для чтения» если установить соответствующее состояние ячейкам таблицы.
Следующий код создаёт таблицу с ячейками, которым установлено состояние "AcDb::kCellStateContentReadOnly"
Код - C++: [Выделить]
- AcGePoint3d insPoint;
- int ret = acedGetPoint
- (
- NULL,
- _T("\nУкажите точку вставки: "),
- asDblArray(insPoint)
- );
- if(ret != RTNORM)
- return;
- Acad::ErrorStatus es;
- AcDbTable *pTable = new AcDbTable();
- AcDbDictionary *pDict = NULL;
- AcDbDatabase *pDb
- = acdbHostApplicationServices()->workingDatabase();
- es = pDb->getTableStyleDictionary(pDict,AcDb::kForRead);
- AcDbObjectId styleId;
- es = pDict->getAt(_T("Standard"), styleId);
- es = pDict->close();
- pTable->setTableStyle(styleId);
- int rows = 3;
- int cols = 2;
- pTable->setSize(rows, cols);
- ACHAR content[10];
- for(int row = 0; row < rows; row++)
- {
- for(int col = 0; col < cols; col++)
- {
- acutSPrintf(content, ACRX_T("%d-%d"), row+1, col+1);
- es = pTable->setTextString(row, col, content);
- // Устанавливаем состояние ячейки в «только для чтения»
- es = pTable->setCellState
- (
- row,
- col,
- AcDb::kCellStateContentReadOnly
- );
- }
- }
- pTable->generateLayout();
- pTable->setPosition(insPoint);
- AcDbBlockTable *pBlockTable;
- pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
- AcDbBlockTableRecord *pBlockTableRecord;
- pBlockTable->getAt
- (
- ACDB_MODEL_SPACE,
- pBlockTableRecord,
- AcDb::kForWrite
- );
- pBlockTable->close();
- pBlockTableRecord->appendAcDbEntity(pTable);
- pBlockTableRecord->close();
- pTable->close();
Источник: http://adndevblog.typepad.com/autocad/2012/04/creating-a-table-with-read-only-contents.html
Автор перевода: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=3197
Опубликовано 10.11.2015