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“
- Die Grundlagen
- Zeichnungsentwurf
- Richtige Verbindung zu KOMPAS
- Hauptinschrift
- Grafische Grundelemente
- Speichern eines Dokuments in verschiedenen Formaten
- Einstellungen kennenlernen
- Anspruchsvollere Schreibmethoden im Schriftfeld
- Beschriftungszellen lesen
- Sonderzeichen einschließlich einer Zeichenfolge
- Einfache Textbeschriftungen
- Zusammengesetzte Zeichenfolgen
- Absätze
- 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.
FazitIn 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".