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ã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".