在上一课中,我们研究了如何使用段落显示多行文本。 所描述的方法需要手动遍历输出字符串数组。 在本课程中,我们将探讨一种没有此缺点的替代方法。 它基于
ksTextParam接口和
ksTextEx方法。

课程系列“使用KOMPAS-3D API的工作”的内容
- 基础知识
- 图纸设计
- 正确连接到KOMPAS
- 主题词
- 图形图元
- 以各种格式保存文档
- 了解设置
- 标题栏中更复杂的书写方法
- 读取字幕单元
- 特殊字符,包括字符串
- 简单文字标签
- 复合弦
- 段落
- 多行文字
文字选项( ksTextParam )
ksTextParam接口是
ksParagraphParam接口的附加
组件,并且是输出字符串的数组。 要获取它,您需要使用常量
ko_TextParam调用
KompasObject接口的
GetParamStruct方法。
ksTextParam接口
没有属性 ,因此我们立即开始考虑其方法。
GetParagraphParam() -返回ksParagraphParam段落的参数接口。 没有输入参数。
GetTextLineArr() -返回输出行ksDynamicArray的动态数组。 没有输入参数。
Init() -重置文本参数。 没有输入参数。 如果成功,则返回true。
SetParagraphParam-设置段落参数。 作为唯一参数,它接受包含可设置参数的
ksParagraphParam接口。 如果成功,则返回
true ,如果发生错误,则返回
false 。
SetTextLineArr-设置输出字符串的数组。 作为唯一参数,它采用包含输出行的
ksDynamicArray接口。 如果成功,则返回
true ,如果发生错误,则返回
false 。
由
GetTextLineArr()方法返回并由
SetTextLineArr方法设置的动态数组的类型为
TEXT_LINE_ARR 。 这意味着数组的元素是
ksTextLineParam接口。
KsTextEx方法
要显示多行文本,请使用
ksDocument2D界面的
ksTextEx方法。 下面是它的原型:
long ksTextEx ( LPDISPATCH txtParam, // ksTextParam long align // );
下表显示
align参数的有效值。

如果成功,则
ksTextEx方法将返回一个指向生成的文本的整数指针。 并且在错误
为零的情况下。
例子
以下是演示使用ksTextEx方法输出多行文本的程序的摘要。 // DynamicArrayPtr items; items = static_cast<DynamicArrayPtr>(kompas->GetDynamicArray(TEXT_ITEM_ARR)); items->ksClearArray(); DynamicArrayPtr lines; lines = static_cast<DynamicArrayPtr>(kompas->GetDynamicArray(TEXT_LINE_ARR)); lines->ksClearArray(); // TextLineParamPtr lineParam; lineParam = static_cast<TextLineParamPtr>(kompas->GetParamStruct(ko_TextLineParam)); lineParam->Init(); TextItemParamPtr itemParam; itemParam = static_cast<TextItemParamPtr>(kompas->GetParamStruct(ko_TextItemParam)); itemParam->Init(); TextItemFontPtr itemFont = static_cast<TextItemFontPtr>(itemParam->GetItemFont()); // BSTR str = SysAllocString(OLESTR(" ")); itemParam->set_s(str); items->ksAddArrayItem(-1, itemParam); lineParam->SetTextItemArr(items); lines->ksAddArrayItem(-1, lineParam); lineParam->Init(); SysFreeString(str); str = NULL; itemFont->set_bitVector(NEW_LINE | ITALIC_OFF); str = SysAllocString(OLESTR(" ")); itemParam->set_s(str); items->ksAddArrayItem(-1, itemParam); lineParam->SetTextItemArr(items); lines->ksAddArrayItem(-1, lineParam); lineParam->Init(); SysFreeString(str); str = NULL; itemFont->set_bitVector(NEW_LINE | ITALIC_ON | BOLD_ON); str = SysAllocString(OLESTR(" ")); itemParam->set_s(str); items->ksAddArrayItem(-1, itemParam); lineParam->SetTextItemArr(items); lines->ksAddArrayItem(-1, lineParam); lineParam->Init(); SysFreeString(str); str = NULL; itemFont->set_bitVector(NEW_LINE | BOLD_OFF | UNDERLINE_ON); str = SysAllocString(OLESTR(" ")); itemParam->set_s(str); items->ksAddArrayItem(-1, itemParam); lineParam->SetTextItemArr(items); lines->ksAddArrayItem(-1, lineParam); lineParam->Init(); SysFreeString(str); str = NULL; itemParam.Unbind(); lineParam.Unbind(); itemFont.Unbind(); items.Unbind(); // ParagraphParamPtr paragraphParam; paragraphParam= static_cast<ParagraphParamPtr>(kompas->GetParamStruct(ko_ParagraphParam)); paragraphParam->Init(); paragraphParam->set_x(100.0); paragraphParam->set_y(100.0); paragraphParam->set_width(60.0); paragraphParam->set_hFormat(2); // TextParamPtr textParam = static_cast<TextParamPtr>(kompas->GetParamStruct(ko_TextParam)); textParam->SetParagraphParam(paragraphParam); textParam->SetTextLineArr(lines); // Document2D->ksTextEx(textParam, 1); lines->ksDeleteArray(); lines.Unbind(); paragraphParam.Unbind(); textParam.Unbind(); // kompas->set_Visible(true); kompas.Unbind();
在此示例中,我们不绕过数组,而是一次调用所需的方法。 他找到
NEW_LINE标志并正确解释它们。 请注意:带有此标志的每一行都在单独的
ksTextLineParam接口中发布。 如果将它们放在一个
ksTextLineParam中 ,则COMPAS将忽略
NEW_LINE标志。 下图显示了该程序的结果。
结论在本课程中,我们研究了显示多行文本的另一种方法。 它比我们之前检查的要复杂一些,但是不需要手动遍历字符串数组。 使用哪个取决于您。
在下一课中,我们将返回复合线的主题,并查看使用段落创建复合线的文档化方法。
要继续,请关注博客新闻。
Sergey Norseev博士,《在Delphi中进行COMPAS的应用程序开发》一书的作者。