Trabajar con la API de KOMPAS-3D → Lección 14 → Texto multilínea

En la lección anterior, vimos cómo mostrar texto de varias líneas usando un párrafo. El método descrito requiere un recorrido manual de la matriz de cadenas de salida. En esta lección, veremos una forma alternativa sin este inconveniente. Se basa en la interfaz ksTextParam y el método ksTextEx .



El contenido de la serie de lecciones "Trabajando con la API KOMPAS-3D"


  1. Los fundamentos
  2. Diseño de dibujo
  3. Conexión correcta a KOMPAS
  4. Inscripción principal
  5. Primitivas gráficas
  6. Guardar un documento en varios formatos
  7. Conociendo la configuración
  8. Métodos de escritura más sofisticados en el bloque de título
  9. Lectura de celdas de subtítulos
  10. Caracteres especiales que incluyen una cadena
  11. Etiquetas de texto simple
  12. Cuerdas compuestas
  13. Los párrafos
  14. Texto multilínea

Opciones de texto ( ksTextParam )


La interfaz ksTextParam es un complemento de la interfaz ksParagraphParam y una matriz de cadenas de salida. Para obtenerlo, debe llamar al método GetParamStruct de la interfaz KompasObject con la constante ko_TextParam .
La interfaz ksTextParam no tiene propiedades , por lo que inmediatamente consideramos sus métodos.
GetParagraphParam () : devuelve la interfaz de parámetros del párrafo ksParagraphParam. No tiene parámetros de entrada.
GetTextLineArr () : devuelve una matriz dinámica de ksDynamicArray de líneas de salida. No tiene parámetros de entrada.
Init () : restablece los parámetros de texto. No tiene parámetros de entrada. Si tiene éxito, devuelve verdadero.
SetParagraphParam : establece los parámetros de párrafo. Como único parámetro, acepta la interfaz ksParagraphParam que contiene los parámetros configurables. Si tiene éxito, devuelve verdadero y, en caso de error, falso .
SetTextLineArr : establece una matriz de cadenas de salida. Como único parámetro, toma la interfaz ksDynamicArray que contiene las líneas de salida. Si tiene éxito, devuelve verdadero y, en caso de error, falso .
La matriz dinámica devuelta por el método GetTextLineArr () y establecida por el método SetTextLineArr es del tipo TEXT_LINE_ARR . Esto significa que los elementos de la matriz son las interfaces ksTextLineParam .

Método KsTextEx


Para mostrar texto de varias líneas, use el método ksTextEx de la interfaz ksDocument2D . A continuación se muestra un prototipo:

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

La siguiente tabla muestra los valores válidos para el parámetro de alineación .



Si tiene éxito, el método ksTextEx devuelve un puntero entero al texto generado. Y en caso de error: cero .

Ejemplo


El siguiente es un fragmento de un programa que muestra la salida de texto multilínea utilizando el método 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(); 


En este ejemplo, no omitimos la matriz, sino que llamamos al método deseado una vez. Encuentra las banderas NEW_LINE y las interpreta correctamente. Tenga en cuenta: cada nueva línea con este indicador se emite en una interfaz ksTextLineParam separada. Si los coloca en un ksTextLineParam , COMPAS ignorará el indicador NEW_LINE . La siguiente figura muestra el resultado de este programa.



Conclusión

En esta lección, vimos una forma alternativa de mostrar texto de varias líneas. Es algo más complicado que lo que examinamos anteriormente, pero no requiere el recorrido manual de una serie de cadenas. Cuál usar depende de usted.

En la próxima lección, volveremos al tema de las líneas compuestas y veremos la forma documentada de crearlas usando párrafos.

Para continuar, sigue las noticias del blog.

Sergey Norseev, Ph.D., autor del libro "Desarrollo de aplicaciones para COMPAS en Delphi".

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


All Articles