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"
- Los fundamentos
- Diseño de dibujo
- Conexión correcta a KOMPAS
- Inscripción principal
- Primitivas gráficas
- Guardar un documento en varios formatos
- Conociendo la configuración
- Métodos de escritura más sofisticados en el bloque de título
- Lectura de celdas de subtítulos
- Caracteres especiales que incluyen una cadena
- Etiquetas de texto simple
- Cuerdas compuestas
- Los párrafos
- 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ónEn 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".