Arbeiten Sie mit der KOMPAS-3D-API → Lektion 14 → Mehrzeiliger Text

In der vorherigen Lektion haben wir uns angesehen, wie mehrzeiliger Text mithilfe eines Absatzes angezeigt wird. Das beschriebene Verfahren erfordert das manuelle Durchlaufen des Arrays von Ausgabezeichenfolgen. In dieser Lektion werden wir einen alternativen Weg ohne diesen Nachteil betrachten. Es basiert auf der ksTextParam- Schnittstelle und der ksTextEx- Methode.



Der Inhalt der Unterrichtsreihe „Arbeiten mit der KOMPAS-3D-API“


  1. Die Grundlagen
  2. Zeichnungsentwurf
  3. Richtige Verbindung zu KOMPAS
  4. Hauptinschrift
  5. Grafische Grundelemente
  6. Speichern eines Dokuments in verschiedenen Formaten
  7. Einstellungen kennenlernen
  8. Anspruchsvollere Schreibmethoden im Schriftfeld
  9. Beschriftungszellen lesen
  10. Sonderzeichen einschließlich einer Zeichenfolge
  11. Einfache Textbeschriftungen
  12. Zusammengesetzte Zeichenfolgen
  13. Absätze
  14. Mehrzeiliger Text

Textoptionen ( ksTextParam )


Die ksTextParam- Schnittstelle ist ein Add-On zur ksParagraphParam- Schnittstelle und ein Array von Ausgabezeichenfolgen. Um es zu erhalten, müssen Sie die GetParamStruct- Methode der KompasObject- Schnittstelle mit der Konstante ko_TextParam aufrufen .
Die ksTextParam- Schnittstelle verfügt nicht über Eigenschaften , daher werden die Methoden sofort berücksichtigt.
GetParagraphParam () - Gibt die Parameterschnittstelle des ksParagraphParam-Absatzes zurück. Es hat keine Eingabeparameter.
GetTextLineArr () - gibt ein dynamisches Array von ksDynamicArray von Ausgabezeilen zurück. Es hat keine Eingabeparameter.
Init () - setzt die Textparameter zurück. Es hat keine Eingabeparameter. Wenn erfolgreich, wird true zurückgegeben.
SetParagraphParam - Legt Absatzparameter fest . Als einziger Parameter akzeptiert es die ksParagraphParam- Schnittstelle, die die einstellbaren Parameter enthält. Bei Erfolg wird true und im Fehlerfall false zurückgegeben .
SetTextLineArr - Legt ein Array von Ausgabezeichenfolgen fest. Als einziger Parameter wird die ksDynamicArray- Schnittstelle verwendet, die die Ausgabezeilen enthält. Bei Erfolg wird true und im Fehlerfall false zurückgegeben .
Das von der GetTextLineArr () -Methode zurückgegebene und von der SetTextLineArr- Methode festgelegte dynamische Array ist vom Typ TEXT_LINE_ARR . Dies bedeutet, dass die Elemente des Arrays die ksTextLineParam- Schnittstellen sind.

KsTextEx- Methode


Verwenden Sie zum Anzeigen von mehrzeiligem Text die ksTextEx- Methode der ksDocument2D- Schnittstelle. Unten ist ein Prototyp davon:

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

Die folgende Tabelle zeigt die gültigen Ausrichtungsparameterwerte.



Bei Erfolg gibt die ksTextEx- Methode einen ganzzahligen Zeiger auf den generierten Text zurück. Und im Fehlerfall - Null .

Beispiel


Das Folgende ist ein Ausschnitt eines Programms, das die mehrzeilige Textausgabe mit der ksTextEx-Methode demonstriert.
 //  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(); 


In diesem Beispiel umgehen wir das Array nicht, sondern rufen die gewünschte Methode einmal auf. Er findet die NEW_LINE- Flags und interpretiert sie richtig. Bitte beachten Sie: Jede neue Zeile mit diesem Flag wird in einer separaten ksTextLineParam- Schnittstelle ausgegeben. Wenn Sie sie in einem ksTextLineParam platzieren , ignoriert COMPAS das NEW_LINE- Flag. Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Fazit

In dieser Lektion haben wir uns eine alternative Möglichkeit angesehen, mehrzeiligen Text anzuzeigen. Es ist etwas komplizierter als das, was wir zuvor untersucht haben, erfordert jedoch kein manuelles Durchlaufen eines Arrays von Zeichenfolgen. Welches Sie verwenden möchten, liegt bei Ihnen.

In der nächsten Lektion kehren wir zum Thema zusammengesetzte Linien zurück und betrachten die dokumentierte Methode, um sie mithilfe von Absätzen zu erstellen.

Um fortzufahren, folgen Sie den Nachrichten des Blogs.

Sergey Norseev, Ph.D., Autor des Buches "Anwendungsentwicklung für COMPAS in Delphi".

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


All Articles