Bekerja dengan API KOMPAS-3D โ†’ Pelajaran 14 โ†’ Teks Multiline

Dalam pelajaran sebelumnya, kami melihat cara menampilkan teks multi-baris menggunakan paragraf. Metode yang dijelaskan membutuhkan traversal manual dari array string keluaran. Dalam pelajaran ini, kita akan melihat cara alternatif tanpa kekurangan ini. Ini didasarkan pada antarmuka ksTextParam dan metode ksTextEx .



Isi seri pelajaran โ€œBekerja dengan API KOMPAS-3Dโ€


  1. Dasar-dasarnya
  2. Desain gambar
  3. Koneksi yang benar ke KOMPAS
  4. Prasasti utama
  5. Primitif grafis
  6. Menyimpan dokumen dalam berbagai format
  7. Mengenal pengaturan
  8. Metode penulisan yang lebih canggih di blok judul
  9. Membaca sel teks
  10. Karakter khusus termasuk string
  11. Label teks sederhana
  12. Senar majemuk
  13. Paragraf
  14. Teks multiline

Opsi Teks ( ksTextParam )


Antarmuka ksTextParam adalah add-on untuk antarmuka ksParagraphParam dan larik string keluaran. Untuk mendapatkannya, Anda perlu memanggil metode GetParamStruct dari antarmuka KompasObject dengan ko_TextParam konstan.
Antarmuka ksTextParam tidak memiliki properti , jadi kami segera melanjutkan untuk mempertimbangkan metode-metodenya.
GetParagraphParam () - mengembalikan antarmuka parameter paragraf ksParagraphParam. Tidak memiliki parameter input.
GetTextLineArr () - mengembalikan larik dinamis ksDynamicArray dari garis keluaran. Tidak memiliki parameter input.
Init () - mengatur ulang parameter teks. Tidak memiliki parameter input. Jika berhasil, mengembalikan true.
SetParagraphParam - mengatur parameter paragraf. Sebagai satu-satunya parameter, ia menerima antarmuka ksParagraphParam yang berisi parameter yang dapat diatur . Jika berhasil, mengembalikan true , dan jika terjadi kesalahan, false .
SetTextLineArr - Menetapkan larik string keluaran. Sebagai satu-satunya parameter, dibutuhkan antarmuka ksDynamicArray yang berisi garis output. Jika berhasil, mengembalikan true , dan jika terjadi kesalahan, false .
Array dinamis yang dikembalikan oleh metode GetTextLineArr () dan ditetapkan oleh metode SetTextLineArr adalah tipe TEXT_LINE_ARR . Ini berarti bahwa elemen-elemen dari array adalah antarmuka ksTextLineParam .

Metode KsTextEx


Untuk menampilkan teks multi-baris, gunakan metode ksTextEx dari antarmuka ksDocument2D . Di bawah ini adalah prototipe dari itu:

long ksTextEx ( LPDISPATCH txtParam, //  ksTextParam long align //   ); 

Tabel di bawah ini menunjukkan nilai parameter penyelarasan yang valid.



Jika berhasil, metode ksTextEx mengembalikan pointer integer ke teks yang dihasilkan. Dan dalam hal terjadi kesalahan - nol .

Contoh


Berikut ini adalah cuplikan dari program yang menunjukkan keluaran teks multiline menggunakan metode 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(); 


Dalam contoh ini, kita tidak mem-bypass array, tetapi memanggil metode yang diinginkan sekali. Dia menemukan bendera NEW_LINE dan menafsirkannya dengan benar. Harap dicatat: setiap baris baru dengan flag ini dikeluarkan dalam antarmuka ksTextLineParam terpisah. Jika Anda menempatkannya dalam satu ksTextLineParam , maka COMPAS akan mengabaikan bendera NEW_LINE . Gambar di bawah ini menunjukkan hasil dari program ini.



Kesimpulan

Dalam pelajaran ini, kami melihat cara alternatif untuk menampilkan teks multi-baris. Ini agak lebih rumit daripada apa yang kita periksa sebelumnya, tetapi tidak memerlukan traversal manual dari serangkaian string. Yang mana yang harus digunakan terserah Anda.

Dalam pelajaran berikutnya, kita akan kembali ke subjek garis majemuk dan melihat cara yang terdokumentasi untuk membuatnya menggunakan paragraf.

Untuk dilanjutkan, ikuti berita blog.

Sergey Norseev, Ph.D., penulis buku "Pengembangan Aplikasi untuk COMPAS di Delphi."

Source: https://habr.com/ru/post/id434576/


All Articles