他们在 Corel Draw 中为我们创建了布局。为了避免编辑每个文本字段(所有内容都已在数据库中),决定通过 OLE 自动化该过程。有必要分析并在必要时替换几个文本表单(Shape)的内容 - 例如,在屏幕截图中,它们是“Product_type_top”和“Description_top”:
初始化:
const
filename = 'P:\CorelPassports\for_open_d.cdr';
var
cdr:Variant;
sh,sh1:Variant;
shapes:array of Variant;
s:string;
<...>
try
cdr:=createoleobject('CorelDRAW.Application');
except
// Обработка
end;
cdr.Visible:=true;
try
cdr.OpenDocument(filename);
except
// Обработка
end;
使用不属于组的表单,一切都很简单:
cdr.ActiveDocument.ClearSelection;
sh:=cdr.ActivePage.FindShape('Тип_продукта_верх');
// sh.Type = cdrTextShape = 6, т.е. текстовый тип
// и мы можем дальше работать с текстом:
s:=sh.Text.Story;
<..>
但是如果表格是一个组,一切都变得更加复杂和难以理解:
sh:=cdr.ActivePage.FindShape('Описание_верх');
// sh.Type = cdrGroupShape = 7, т.е. группа
// и нужно получать доступ к членам группы
// пробуем, как в VBA осуществить это через массив:
shapes:=sh.Shapes;
错误“无效参数”
有什么问题?如何获取组的所有子文本元素?
当我制定问题并输入问题时,我想到我的 CQL(Corel 查询语言)教科书仍然有点旧,也许,某些结构已经改变了描述。实际上,从 X3 版本开始(如果我没有混淆任何东西),Shapes 方法返回的不是形状的数组/集合,而是提供对集合的访问的类。因此,要获取整组表单,下面的代码就足够了: