Na lição anterior, vimos como exibir texto de várias linhas usando um parágrafo. O método descrito requer a travessia manual da matriz de seqüências de saída. Nesta lição, veremos uma maneira alternativa sem essa desvantagem. É baseado na interface 
ksTextParam e no método 
ksTextEx .

O conteúdo da série de lições “Trabalhando com a API COMPASS-3D”
- O básico
- Desenho de desenho
- Conexão correta com o KOMPAS
- Inscrição principal
- Primitivas gráficas
- Salvando um documento em vários formatos
- Conhecendo as configurações
- Métodos de escrita mais sofisticados no bloco de título
- Lendo células de legenda
- Caracteres especiais, incluindo uma sequência
- Etiquetas de texto simples
- Cordas compostas
- Parágrafos
- Texto de várias linhas
Opções de texto ( ksTextParam )
A interface 
ksTextParam é um complemento para a interface 
ksParagraphParam e uma matriz de seqüências de caracteres de saída. Para obtê-lo, você precisa chamar o método 
GetParamStruct da interface 
KompasObject com a constante 
ko_TextParam .
A interface 
ksTextParam não possui 
propriedades , portanto, imediatamente consideramos seus métodos.
GetParagraphParam () - retorna a interface do parâmetro do parágrafo ksParagraphParam. Não possui parâmetros de entrada.
GetTextLineArr () - retorna uma matriz dinâmica de ksDynamicArray de linhas de saída. Não possui parâmetros de entrada.
Init () - redefine os parâmetros de texto. Não possui parâmetros de entrada. Se for bem-sucedido, retorna verdadeiro.
SetParagraphParam - define os parâmetros do parágrafo. Como único parâmetro, ele aceita a interface 
ksParagraphParam que contém os parâmetros configuráveis. Se for bem-sucedido, retorna 
verdadeiro e, em caso de erro, 
falso .
SetTextLineArr - Define uma matriz de seqüências de saída. Como único parâmetro, ele usa a interface 
ksDynamicArray que contém as linhas de saída. Se for bem-sucedido, retorna 
verdadeiro e, em caso de erro, 
falso .
A matriz dinâmica retornada pelo método 
GetTextLineArr () e definida pelo método 
SetTextLineArr é do tipo 
TEXT_LINE_ARR . Isso significa que os elementos da matriz são as interfaces 
ksTextLineParam .
Método KsTextEx
Para exibir texto de várias linhas, use o método 
ksTextEx da interface 
ksDocument2D . Abaixo está um protótipo:
long ksTextEx ( LPDISPATCH txtParam, //  ksTextParam long align //   ); 
A tabela abaixo mostra os valores válidos para o parâmetro 
align .

Se for bem-sucedido, o método 
ksTextEx retorna um ponteiro inteiro para o texto gerado. E em caso de erro - 
zero .
Exemplo
A seguir, é apresentado um trecho de um programa que demonstra a saída de texto de várias linhas usando o 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(); 
 Neste exemplo, não ignoramos a matriz, mas chamamos o método desejado uma vez. Ele encontra os sinalizadores 
NEW_LINE e os interpreta corretamente. Observe: cada nova linha com esse sinalizador é emitida em uma interface 
ksTextLineParam separada. Se você os colocar em um 
ksTextLineParam , o COMPAS ignorará o sinalizador 
NEW_LINE . A figura abaixo mostra o resultado deste programa.
 Conclusão
ConclusãoNesta lição, vimos uma maneira alternativa de exibir texto com várias linhas. É um pouco mais complicado do que o que examinamos anteriormente, mas não requer a passagem manual de uma matriz de seqüências de caracteres. Qual usar é com você.
Na próxima lição, retornaremos ao assunto das linhas compostas e veremos a maneira documentada de criá-las usando parágrafos.
Para continuar, acompanhe as notícias do blog.
 Sergey Norseev, Ph.D., autor do livro "Application Development for COMPAS in Delphi".