Trabalhar com a API KOMPAS-3D → Lição 14 → Texto de várias linhas

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”


  1. O básico
  2. Desenho de desenho
  3. Conexão correta com o KOMPAS
  4. Inscrição principal
  5. Primitivas gráficas
  6. Salvando um documento em vários formatos
  7. Conhecendo as configurações
  8. Métodos de escrita mais sofisticados no bloco de título
  9. Lendo células de legenda
  10. Caracteres especiais, incluindo uma sequência
  11. Etiquetas de texto simples
  12. Cordas compostas
  13. Parágrafos
  14. 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

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

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


All Articles