13,825
社区成员
发帖
与我相关
我的任务
分享
//递归读取Group中的Shape...
void ReadShapeGroup(TShapeGroupClientAnchor *pGroupClient)
{
int Count = pGroupClient->Count() ;
for(int i = 0 ; i < Count ; ++i)
{
TShapeGroupClientAnchor *GroupChild =
dynamic_cast<TShapeGroupClientAnchor*>(pGroupClient->Items[i]);
TShapeChildAnchor *pShapeChild =
dynamic_cast<TShapeChildAnchor*>(pGroupClient->Items[i]);
if(GroupChild) //子Group
ReadShapeGroup(GroupChild);
else if(pShapeChild) //可识别的Shape
{
pShapeChild->ShapeType ; //Shape类型太多,要自行测试。箭头 = 20
pShapeChild->FlipHorizontal ;//水平翻转
pShapeChild->FlipVertical ; //竖直翻转 这两个翻转值可以用来识别箭头的方向。
pShapeChild->X1 ; // X1 Y1 X2 Y2 是其矩形坐标
//读出每行高,及每列宽,通过计算得到 Shape 是在哪行哪列。
//再通过识别合并单元格,得到箭头指向的内容。
}
else //未能识别的 Shape
{
pGroupClient->Items[i]->ShapeType ;
//...
}
}
}
//使用代码:
XLS->Filename = OpenDialog1->FileName ;
XLS->RefreshAll = true ;
XLS->Read();
TShapeGroupClientAnchor*group = dynamic_cast<TShapeGroupClientAnchor*>
(XLS->Sheets->Items[0]->_Int_EscherDrawing->Group);
if(group)
ReadShapeGroup(group);