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
- Les bases
- Conception de dessin
- Connexion correcte à KOMPAS
- Inscription principale
- Primitives graphiques
- Enregistrement d'un document dans différents formats
- Connaître les paramètres
- Méthodes d'écriture plus sophistiquées dans le cartouche
- Lecture des cellules de légende
- Caractères spéciaux dont une chaîne
- Étiquettes de texte simples
- Chaînes composées
- Paragraphes
- 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.
ConclusionDans 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".