前のレッスンでは、段落を使用して複数行のテキストを表示する方法を見ました。 説明されている方法では、出力文字列の配列を手動で走査する必要があります。 このレッスンでは、この欠点のない代替方法を見ていきます。 これは、
ksTextParamインターフェイスと
ksTextExメソッドに基づいています。

レッスンシリーズ「KOMPAS-3D APIの操作」の内容
- 基本
- 図面デザイン
- COMPASSへの正しい接続
- 主な碑文
- グラフィックプリミティブ
- ドキュメントをさまざまな形式で保存する
- 設定を知る
- タイトルブロックに書き込むためのより複雑なメソッド
- キャプションセルの読み取り
- 文字列を含む特殊文字
- シンプルなテキストラベル
- 複合文字列
- 段落
- 複数行テキスト
テキストオプション( 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();
この例では、配列をバイパスしませんが、目的のメソッドを1回呼び出します。 彼は
NEW_LINEフラグを見つけて、それらを正しく解釈します。 注:このフラグが付いた新しい各行は、個別の
ksTextLineParamインターフェイスで発行されます。 それらを1つの
ksTextLineParamに配置すると、COMPASは
NEW_LINEフラグを無視します。 次の図は、このプログラムの結果を示しています。
おわりにこのレッスンでは、複数行のテキストを表示する別の方法を検討しました。 これは以前に調べたものよりもやや複雑ですが、文字列の配列を手動で走査する必要はありません。 どちらを使用するかはあなた次第です。
次のレッスンでは、複合行の主題に戻り、段落を使用してそれらを作成する文書化された方法を見ていきます。
継続するには、ブログのニュースに従ってください。
Sergey Norseev博士、「DelphiでのCOMPASのアプリケーション開発」の著者。