Utilisation de l'API KOMPAS-3D → Leçon 14 → Texte multiligne

Dans la leçon précédente, nous avons vu comment afficher du texte sur plusieurs lignes à l'aide d'un paragraphe. La méthode décrite nécessite une traversée manuelle du tableau de chaînes de sortie. Dans cette leçon, nous verrons une autre manière sans cet inconvénient. Il est basé sur l'interface ksTextParam et la méthode ksTextEx .



Le contenu de la série de leçons «Travailler avec l'API COMPASS-3D


  1. Les bases
  2. Conception de dessin
  3. Connexion correcte à KOMPAS
  4. Inscription principale
  5. Primitives graphiques
  6. Enregistrement d'un document dans différents formats
  7. Connaître les paramètres
  8. Méthodes d'écriture plus sophistiquées dans le cartouche
  9. Lecture des cellules de légende
  10. Caractères spéciaux dont une chaîne
  11. Étiquettes de texte simples
  12. Chaînes composées
  13. Paragraphes
  14. Texte multiligne

Options de texte ( ksTextParam )


L'interface ksTextParam est un module complémentaire de l'interface ksParagraphParam et un tableau de chaînes de sortie. Pour l'obtenir, vous devez appeler la méthode GetParamStruct de l'interface KompasObject avec la constante ko_TextParam .
L'interface ksTextParam n'a pas de propriétés , nous allons donc immédiatement considérer ses méthodes.
GetParagraphParam () - renvoie l'interface de paramètre du paragraphe ksParagraphParam. Il n'a pas de paramètres d'entrée.
GetTextLineArr () - renvoie un tableau dynamique de ksDynamicArray des lignes de sortie. Il n'a pas de paramètres d'entrée.
Init () - réinitialise les paramètres de texte. Il n'a pas de paramètres d'entrée. En cas de succès, renvoie true.
SetParagraphParam - définit les paramètres de paragraphe. Comme seul paramètre, il accepte l'interface ksParagraphParam contenant les paramètres réglables. En cas de succès, renvoie vrai et en cas d'erreur, faux .
SetTextLineArr - Définit un tableau de chaînes de sortie. Comme seul paramètre, il prend l'interface ksDynamicArray contenant les lignes de sortie. En cas de succès, renvoie vrai et en cas d'erreur, faux .
Le tableau dynamique renvoyé par la méthode GetTextLineArr () et défini par la méthode SetTextLineArr est de type TEXT_LINE_ARR . Cela signifie que les éléments du tableau sont les interfaces ksTextLineParam .

Méthode KsTextEx


Pour afficher du texte sur plusieurs lignes, utilisez la méthode ksTextEx de l'interface ksDocument2D . En voici un prototype:

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

Le tableau ci-dessous montre les valeurs valides pour le paramètre align .



En cas de succès, la méthode ksTextEx renvoie un pointeur entier vers le texte généré. Et en cas d'erreur - zéro .

Exemple


Voici un extrait d'un programme qui illustre la sortie de texte multiligne à l'aide de la méthode 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(); 


Dans cet exemple, nous ne contournons pas le tableau, mais appelons une fois la méthode souhaitée. Il trouve les drapeaux NEW_LINE et les interprète correctement. Remarque: chaque nouvelle ligne avec cet indicateur est émise dans une interface ksTextLineParam distincte. Si vous les placez dans un ksTextLineParam , alors COMPAS ignorera l'indicateur NEW_LINE . La figure ci-dessous montre le résultat de ce programme.



Conclusion

Dans cette leçon, nous avons examiné une autre façon d'afficher du texte sur plusieurs lignes. C'est un peu plus compliqué que ce que nous avons examiné précédemment, mais ne nécessite pas de traversée manuelle d'un tableau de chaînes. Lequel utiliser est à vous.

Dans la prochaine leçon, nous reviendrons sur le sujet des lignes composées et examinerons la manière documentée de les créer à l'aide de paragraphes.

Pour continuer, suivez l'actualité du blog.

Sergey Norseev, Ph.D., auteur du livre "Application Development for COMPAS in Delphi".

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


All Articles