KOMPAS-3D APIの操作→レッスン14→複数行テキスト

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







レッスンシリーズ「KOMPAS-3D APIの操作」の内容



  1. 基本
  2. 図面デザイン
  3. COMPASSへの正しい接続
  4. 主な碑文
  5. グラフィックプリミティブ
  6. ドキュメントをさまざまな形式で保存する
  7. 設定を知る
  8. タイトルブロックに書き込むためのより複雑なメソッド
  9. キャプションセルの読み取り
  10. 文字列を含む特殊文字
  11. シンプルなテキストラベル
  12. 複合文字列
  13. 段落
  14. 複数行テキスト


テキストオプション( 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のアプリケーション開発」の著者。



All Articles