Arbeiten Sie mit der KOMPAS-3D-API → Lektion 13 → AbsĂ€tze

Bevor wir zu dokumentierten Methoden zum Erstellen zusammengesetzter Zeichenfolgen ĂŒbergehen, mĂŒssen wir uns mit einem Objekt wie einem Absatz vertraut machen. Es ist ein automatisch formatierter Textblock, der aus mehreren Zeilen besteht. In dieser Lektion werden wir uns mit dem Erstellen einfacher AbsĂ€tze befassen.



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

Absatzparameter ( ksParagraphParam )


Ein Absatz wird von der Schnittstelle ksParagraphParam beschrieben . Um es zu erhalten, mĂŒssen Sie die GetParamStruct- Methode der KompasObject- Schnittstelle verwenden. Dazu mĂŒssen Sie die Konstante ko_ParagraphParam ( 0x0000001B ) an sie ĂŒbergeben. BerĂŒcksichtigen Sie die Eigenschaften der ksParagraphParam- Schnittstelle.

ang - der Winkel des Textes in Grad. Es wird von der horizontalen Linie gegen den Uhrzeigersinn verzögert. Ähnlich dem ang- Parameter der ksText- Methode.

Höhe - Die Höhe des Absatzes in Millimetern.

hFormat - Text horizontal formatieren. Diese Eigenschaft wird verwendet, wenn der Text in der Breite nicht in den Absatz passt. GĂŒltige Werte sind in der folgenden Tabelle aufgefĂŒhrt.



Stil - Stil des Textes (beschrieben in Lektion 11 ).

vFormat - Text vertikal formatieren. Diese Eigenschaft wird verwendet, wenn der Text nicht in die Höhe des Absatzes passt. GĂŒltige Werte sind in der folgenden Tabelle aufgefĂŒhrt.



Bei der Arbeit mit der vFormat- Eigenschaft sind zwei Dinge zu beachten:

  1. GemĂ€ĂŸ der KOMPAS-Dokumentation sind die gĂŒltigen Werte der vFormat- Eigenschaft 0 und -1 , dies ist jedoch nicht der Fall . GĂŒltige Werte sind 0 und 1 .
  2. COMPASS Ă€ndert die Höhe der Zeichen nicht. Es Ă€ndert nur den Abstand zwischen den Linien. Wenn die Höhe der Zeilen geringer als die Höhe des Absatzes ist, können sie sich ĂŒberlappen. Ein Beispiel fĂŒr eine solche Überlagerung ist in der folgenden Abbildung dargestellt.



width - Die Breite des Absatzes in Millimetern.
Mit den Eigenschaften height , hFormat , vFormat und width können wir das Problem des Platzierens von Text in einem bestimmten Rechteck lösen. Diese Methode ist viel zuverlÀssiger und effizienter als die in Lektion 11 beschriebene Methode ksGetTextLength .

x und y sind die Koordinaten des Ankerpunktes. Die Position des Absatzes relativ zum Ankerpunkt entlang der horizontalen Achse wird durch die ksSetTextAlign- Methode der ksDocument2D- Schnittstelle angepasst (obwohl diese Möglichkeit nicht dokumentiert ist). Der vertikale Ankerpunkt entspricht immer dem unteren Rand der ersten Zeile des Absatzes. Dieses Verhalten kann nicht geÀndert werden.
Die ksParagraphParam- Schnittstelle verfĂŒgt nur ĂŒber eine Methode: Init () . Es initialisiert die Eigenschaftswerte der Schnittstelle. Es hat keine Eingabeparameter. Wenn erfolgreich, wird true zurĂŒckgegeben .

AbsatzgebÀude


Das Erstellen eines Absatzes besteht aus drei aufeinander folgenden Schritten.

  1. ErklĂ€rung des Absatzanfangs. Dazu wird die ksParagraph- Methode der ksDocument2D- Schnittstelle aufgerufen . Als einziger Parameter akzeptiert diese Methode die Schnittstelle ksParagraphParam , mit der die Parameter des Absatzes festgelegt werden. Bei Erfolg gibt die ksParagraph- Methode Eins zurĂŒck und im Fehlerfall Null .
  2. Den Absatz ausfĂŒllen. FĂŒr jede in einem Absatz angezeigte Zeile wird die ksTextLine- Methode der ksDocument2D- Schnittstelle aufgerufen . Als einziger Parameter akzeptiert es die Schnittstelle ksTextItemParam oder ksTextLineParam (in frĂŒheren Lektionen in der Schleife beschrieben), die die Zeichenfolge beschreibt. Bitte beachten Sie, dass die Ausgabezeilen nicht die Zeichen @ , $ , & , ~ , ^ und # enthalten dĂŒrfen , da es sich um Steuerzeichen handelt. Die Arbeit mit ihnen wird in den nĂ€chsten Lektionen des Zyklus berĂŒcksichtigt.
  3. Ende des Absatzes. Dazu wird die Methode ksEndObj () der Schnittstelle ksDocument2D aufgerufen . Es hat keine Eingabeparameter und gibt bei Erfolg einen ganzzahligen Zeiger auf das erstellte Objekt (Absatz) zurĂŒck. Im Fehlerfall wird Null zurĂŒckgegeben .

Ein Beispiel. Der einfachste Absatz


Unten finden Sie den Quellcode des Programms, der die Konstruktion eines einfachen Absatzes demonstriert.
//  ksTextItemParam TextItemParamPtr textItemParam; textItemParam = static_cast<TextItemParamPtr>(kompas->GetParamStruct(ko_TextItemParam)); //    ParagraphParamPtr paragraphParam; paragraphParam = static_cast<ParagraphParamPtr>(kompas->GetParamStruct(ko_ParagraphParam)); paragraphParam->Init(); paragraphParam->set_x(100.0); paragraphParam->set_y(100.0); //  Document2D->ksParagraph(paragraphParam); //  BSTR str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); //  Document2D->ksEndObj(); paragraphParam.Unbind(); textItemParam.Unbind(); 


Wie immer wird hier der Einfachheit halber der Code weggelassen, der fĂŒr die Erstellung und AusfĂŒhrung des Dokuments verantwortlich ist (dieses Thema wurde in frĂŒheren Lektionen behandelt).

In diesem Beispiel bestimmt KOMPAS selbst die GrĂ¶ĂŸe des Absatzes anhand seines Inhalts. Die folgende Abbildung zeigt den generierten Absatz.



Bitte beachten Sie: Der Text wird als einzelne Zeile angezeigt. Wir haben die Breite des Absatzes nicht angegeben, daher erhöht KOMPAS ihn bei Bedarf automatisch. Wenn die Breite festgelegt wĂŒrde, wĂŒrde das COMPASS-Verhalten durch den Wert der hFormat- Eigenschaft der ksParagraphParam- Schnittstelle bestimmt.

Um einen mehrzeiligen und zusammengesetzten Text zu erstellen, mĂŒssen Sie die Zeichnungsfunktionen verwenden, die in der vorherigen Lektion teilweise erlĂ€utert wurden.

Ein Beispiel. Mehrzeiliger Text


Verwenden Sie das NEW_LINE- Flag ( 0x1000 ), um explizit in eine neue Zeile zu umbrechen .

Das folgende Beispielprogramm demonstriert das Erstellen eines mehrzeiligen Absatzes mit diesem Flag.
 //  ksTextItemParam TextItemParamPtr textItemParam; textItemParam = static_cast<TextItemParamPtr>(kompas->GetParamStruct(ko_TextItemParam)); //    ParagraphParamPtr paragraphParam; paragraphParam = static_cast<ParagraphParamPtr>(kompas->GetParamStruct(ko_ParagraphParam)); paragraphParam->Init(); paragraphParam->set_x(100.0); paragraphParam->set_y(100.0); //  Document2D->ksParagraph(paragraphParam); //  BSTR str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); TextItemFontPtr textItemFont; textItemFont = static_cast<TextItemFontPtr>(textItemParam->GetItemFont()); textItemFont->SetBitVectorValue(NEW_LINE, true); str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); textItemFont.Unbind(); str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); //  Document2D->ksEndObj(); paragraphParam.Unbind(); textItemParam.Unbind(); 


In diesem Beispiel wird ein dreizeiliger Absatz erstellt. Die erste Zeile wird wie gewohnt angezeigt. FĂŒr das zweite wird das NEW_LINE- Flag gesetzt . Er spricht ĂŒber den Beginn einer neuen Zeile. Das dritte wird wie gewohnt angezeigt, aber das NEW_LINE- Flag ist weiterhin aktiv, da wir mit derselben Instanz der ksTextItemParam- Schnittstelle arbeiten. Die folgende Abbildung zeigt den von diesem Programm generierten Absatz.


Jetzt werden die Zeilen korrekt angezeigt.

Herausforderungen fĂŒr die Arbeit mit AbsĂ€tzen


Textausrichtung


Die Textausrichtung wird durch die ksSetTextLineAlign- Methode der ksDocument2D- Schnittstelle festgelegt. Es gibt nur einen ganzzahligen Parameter - Set Alignment. Die gĂŒltigen Werte sind in der folgenden Tabelle aufgefĂŒhrt.



Bei Erfolg gibt die Methode ksSetTextLineAlign das vorherige Ausrichtungsflag zurĂŒck und gibt im Fehlerfall -1 zurĂŒck .

Beachten Sie, dass die ksSetTextLineAlign- Methode nur innerhalb des Blocks verwendet werden kann (in unserem Fall innerhalb des Absatzes). Dies bedeutet, dass die Ausrichtung fĂŒr die Textausgabe mit der ksText- Methode nicht festgelegt werden kann. Diese EinschrĂ€nkung ist darauf zurĂŒckzufĂŒhren, dass KOMPAS in diesem Fall nicht weiß, an welchen RĂ€ndern der Text ausgerichtet werden muss.
Ein weiterer wichtiger Punkt hÀngt mit dem Umfang der ksSetTextLineAlign- Methode zusammen - welche Ausgabezeilen davon betroffen sind. Betrachten Sie ein Beispiel (hier wird im Vergleich zu ihren Originalen eine sehr vereinfachte Syntax verwendet):

 ksSetTextLineAlign(1); ksTextLine(“ ”); ksSetTextLineAlign(2); ksTextLine(“  ”); 

Wie werden die Linien ausgerichtet? Entgegen unseren Erwartungen werden beide Linien nach rechts ausgerichtet. Warum? Tatsache ist, dass die Methode ksSetTextLineAlign zunÀchst die Ausrichtung der letzten Ausgabezeile Àndert. In unserem Beispiel passiert Folgendes: Die erste Zeile legt die Ausrichtung der Mitte fest. Da keine vorherige Ausgabezeile vorhanden ist, Àndert dieser Aufruf die Standardausrichtung (links).

Dann drucken wir die Zeile "Mitte". ZunÀchst wird die zuvor festgelegte Mittenausrichtung verwendet.

In der dritten Zeile Ă€ndern wir erneut die Ausrichtung. ZunĂ€chst Ă€ndert die Methode die Ausrichtung der vorherigen Zeile ("Mitte"). Daher ist es wie geplant nach rechts und nicht zur Mitte ausgerichtet. Die gleiche Ausrichtung wird standardmĂ€ĂŸig ausgerichtet.
Wir zeigen die Zeile "Rechts" an. Da die ksSetTextLineAlign- Methode nicht mehr aufgerufen wird, wird die zuvor festgelegte Ausrichtung (rechts) verwendet.
Somit sind beide Linien nach rechts ausgerichtet. Lassen Sie uns nun das Beispiel ein wenig Àndern:

 ksSetTextLineAlign(1); ksTextLine(“ ”); ksTextLine(“”); ksSetTextLineAlign(2); ksTextLine(“  ”); 

Wir haben lediglich die Ausgabe einer leeren Zeichenfolge hinzugefĂŒgt, ohne die Ausrichtung zu Ă€ndern. Jetzt werden die Zeilen korrekt angezeigt. Dies geschieht, weil die Ausgabe einer leeren Zeichenfolge die eingestellte richtige Ausrichtung „absorbiert“. Der zweite Aufruf der Methode ksSetTextLineAlign wirkt sich auf eine leere Zeile und in keiner Weise auf die Mittellinie aus.
Das folgende Beispiel zeigt die korrekte Ausrichtung, ohne dass eine leere Zeichenfolge angezeigt wird.

 ksTextLine(“ ”); ksSetTextLineAlign(1); ksTextLine(“  ”); ksSetTextLineAlign(2); 

Die Aufrufe ksTextLine und ksSetTextLineAlign werden ausgetauscht. Da die ksSetTextLineAlign- Methode hauptsĂ€chlich die zuletzt angezeigte Zeile betrifft, werden die Ausrichtungen korrekt festgelegt und die Zeilen wie gewĂŒnscht angezeigt.

Beispiel


Das Folgende ist der Quellcode eines Programms, das die Textausrichtung in einem Absatz demonstriert.
 //  ksTextItemParam TextItemParamPtr textItemParam; textItemParam = static_cast<TextItemParamPtr>(kompas->GetParamStruct(ko_TextItemParam)); //    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); //  Document2D->ksParagraph(paragraphParam); //  BSTR str = SysAllocString(L"    "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); TextItemFontPtr textItemFont; textItemFont = static_cast<TextItemFontPtr>(textItemParam->GetItemFont()); textItemFont->SetBitVectorValue(NEW_LINE, true); str = SysAllocString(L""); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); textItemFont.Unbind(); str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); Document2D->ksSetTextLineAlign(1); str = SysAllocString(L""); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); str = SysAllocString(L"    "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); Document2D->ksSetTextLineAlign(3); //  Document2D->ksEndObj(); paragraphParam.Unbind(); textItemParam.Unbind(); 


In diesem Beispiel wird neben der Textausrichtung auch die Verwendung der width- und hFormat- Eigenschaften der ksParagraphParam- Schnittstelle demonstriert. Sie werden verwendet, um die Breite zu begrenzen. Wenn wir sie nicht Ă€ndern wĂŒrden, wĂŒrde KOMPAS die Breite des Absatzes erhöhen und wir wĂŒrden keine Ausrichtung nach links und zur Breite sehen.

Leerzeilen werden angezeigt, um die Lesbarkeit des Absatzes zu verbessern. Sie wirken sich nicht auf die korrekte Ausrichtung aus.

Die folgende Abbildung zeigt den von diesem Programm generierten Absatz.



Aktivieren oder deaktivieren Sie den Stil


In der 11. Lektion des Zyklus haben wir die Flags untersucht, die den Stil steuern ( ITALIC_ON , ITALIC_OFF , BOLD_ON , UNDERLINE_ON und UNDERLINE_OFF ). Dann haben wir sie in Bezug auf die ksText- Methode untersucht. Ein wichtiger Unterschied zwischen ihrer Verwendung in einem Absatz besteht darin, dass die Aktion nicht auf den Aufruf der ksTextLine- Methode beschrÀnkt ist, sondern sich auf den gesamten Absatz erstreckt. Schauen wir uns einige Beispiele an.

 TextItemFont->SetBitVectorValue(BOLD_ON, true); TextItemParam->s = SysAllocString(L” ”); Document2D->ksTextLine(TextItemParam); TextItemFont->Init(); TextItemParam->s = SysAllocString(L” ”); Document2D->ksTextLine(TextItemParam); 

Die erste Zeile wird fett angezeigt. Es gibt keine Fragen dazu. Aber wie wird die zweite Zeile angezeigt? Das Flag BOLD_ON wurde fĂŒr sie zurĂŒckgesetzt. Daher können wir davon ausgehen, dass es in normaler Schrift angezeigt wird. Aber das ist nicht so. Nachdem KOMPAS das BOLD_ON- Flag erfĂŒllt hat, versteht es den Befehl wie folgt: Alle nachfolgenden Zeilen dieses Absatzes sind fett gedruckt. Daher werden alle nachfolgenden Zeilen fett angezeigt, bis der Absatz abgeschlossen ist oder KOMPAS auf das damit gekoppelte BOLD_OFF- Flag stĂ¶ĂŸt. Betrachten Sie ein Beispiel:

 TextItemFont.SetBitVectorValue(BOLD_ON, true); TextItemParam.s = SysAllocString(L” ”); Document2D.ksTextLine(TextItemParam); TextItemFont.Init(); TextItemFont.SetBitVectorValue(BOLD_OFF, true); TextItemParam.s = SysAllocString(L“ ”); Document2D.ksTextLine(TextItemParam); TextItemFont.Init(); TextItemParam.s = SysAllocString(L” ”); Document2D.ksTextLine(TextItemParam); 

Die erste Zeile ist fett gedruckt. FĂŒr die zweite Zeile löschen wir das BOLD_ON- Flag und spannen das damit gepaarte BOLD_OFF-Flag, wodurch der fette Stil aufgehoben wird. Aus diesem Grund werden die zweite und dritte Zeile ohne Fettdruck angezeigt.

Dieses Verhalten gilt fĂŒr die Flags ITALIC_ON , ITALIC_OFF , UNDERLINE_ON und UNDERLINE_OFF , jedoch nicht fĂŒr das Flag NEW_LINE , da es kein Paar ĂŒberschreibender Flags enthĂ€lt.

Beispiel


Das Folgende ist der Quellcode des Programms, der die Ausgabe von Text mit verschiedenen Stilen unter Verwendung von AbsÀtzen zeigt.
 //  ksTextItemParam TextItemParamPtr textItemParam; textItemParam = static_cast<TextItemParamPtr>(kompas->GetParamStruct(ko_TextItemParam)); //    ParagraphParamPtr paragraphParam; paragraphParam = static_cast<ParagraphParamPtr>(kompas->GetParamStruct(ko_ParagraphParam)); paragraphParam->Init(); paragraphParam->set_x(100.0); paragraphParam->set_y(100.0); //  Document2D->ksParagraph(paragraphParam); //  BSTR str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); TextItemFontPtr textItemFont; textItemFont = static_cast<TextItemFontPtr>(textItemParam->GetItemFont()); textItemFont->set_bitVector(NEW_LINE | ITALIC_OFF); // str = SysAllocString(L"  "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); textItemFont->set_bitVector(NEW_LINE | ITALIC_ON | BOLD_ON); // str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); textItemFont->set_bitVector(NEW_LINE | BOLD_OFF | UNDERLINE_ON); // str = SysAllocString(L" "); textItemParam->set_s(str); Document2D->ksTextLine(textItemParam); SysFreeString(str); //  Document2D->ksEndObj(); paragraphParam.Unbind(); textItemFont.Unbind(); textItemParam.Unbind(); 


Der wichtigste Teil dieses Programms ist die richtige Einstellung der Flags fĂŒr die Ausgangsleitungen. Lassen Sie es uns genauer analysieren (die entsprechenden Zeilen des Programms sind mit einem Zeichenpaar „ // “ gekennzeichnet).

Die erste Zeile wird unverĂ€ndert angezeigt. Daher sind keine Flags dafĂŒr gesetzt.

Die zweite Linie sollte ohne Steigung und mit einer neuen Linie angezeigt werden. Daher werden die Flags dafĂŒr gesetzt: NEW_LINE (in einer neuen Zeile beginnen) und ITALIC_OFF ( Kursivschrift deaktivieren).

Die dritte Zeile sollte kursiv und fett gedruckt sein. Dazu spannen wir die Flags: NEW_LINE , ITALIC_ON (Kursivschrift aktivieren ) und BOLD_ON (Fettdruck aktivieren ). Alle anderen Flags werden zurĂŒckgesetzt.

Die vierte Zeile sollte kursiv, unterstrichen und nicht fett gedruckt sein. Dazu spannen wir die Flags: NEW_LINE , BOLD_OFF (fett deaktivieren, links von der vorherigen Zeile) und UNDERLINE_ON (unterstrichen aktivieren).

Wenn der Absatz mehr Zeilen enthĂ€lt, werden diese in kursiv unterstrichener Schrift angezeigt. Um den unterstrichenen Stil zu deaktivieren, mĂŒssen Sie das Flag UNDERLINE_ON löschen und das Flag UNDERLINE_OFF spannen .

Die folgende Abbildung zeigt das Ergebnis dieses Programms.



Informationen von der PrÀsentation trennen


Wenn Sie der Struktur Ihrer Programme folgen, haben Sie wahrscheinlich einen schwerwiegenden Nachteil des vorherigen Beispiels festgestellt: Der Code, der fĂŒr die Generierung der Ausgabe verantwortlich ist, wird mit dem Code gemischt, der fĂŒr die Implementierung der Ausgabe verantwortlich ist. Bei einem guten Programmierstil ist es ĂŒblich, Informationen von der PrĂ€sentation zu trennen.

Wenn die Ausgabeinformationen aus mehreren Zeilen von ksTextItemParam bestehen , können sie zu einer Schnittstelle ksTextLineParam kombiniert werden. Die ksTextLine- Methode kann diese beiden Schnittstellen verarbeiten. Dieser Ansatz hat jedoch eine unangenehme EinschrĂ€nkung: Wenn die ksTextLine- Methode die ksTextLineParam- Schnittstelle akzeptiert, werden die Flags NEW_LINE (und SPECIAL_SYMBOL_END ) ignoriert. Das heißt, alle Informationen werden in einer Zeile angezeigt, auch wenn fĂŒr einige ksTextItemParam- Instanzen das Flag NEW_LINE gesetzt ist. Um diese EinschrĂ€nkung zu umgehen , mĂŒssen Sie ksTextLine fĂŒr jede Zeile manuell aufrufen.

Das Folgende ist der Quellcode fĂŒr ein Beispiel, das diese Technik demonstriert.
 //    DynamicArrayPtr dynamicArray; dynamicArray = static_cast<DynamicArrayPtr>(kompas->GetDynamicArray(TEXT_ITEM_ARR)); dynamicArray->ksClearArray(); //  ksTextItemParam TextItemParamPtr textItemParam; textItemParam = static_cast<TextItemParamPtr>(kompas->GetParamStruct(ko_TextItemParam)); //   BSTR str = SysAllocString(L" "); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); TextItemFontPtr textItemFont; textItemFont = static_cast<TextItemFontPtr>(textItemParam->GetItemFont()); textItemFont->set_bitVector(NEW_LINE | ITALIC_OFF); str = SysAllocString(L"  "); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); textItemFont->set_bitVector(NEW_LINE | ITALIC_ON | BOLD_ON); str = SysAllocString(L" "); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); textItemFont->set_bitVector(NEW_LINE | BOLD_OFF | UNDERLINE_ON); str = SysAllocString(L" "); textItemParam->set_s(str); dynamicArray->ksAddArrayItem(-1, textItemParam); SysFreeString(str); //    ParagraphParamPtr paragraphParam; paragraphParam = static_cast<ParagraphParamPtr>(kompas->GetParamStruct(ko_ParagraphParam)); paragraphParam->Init(); paragraphParam->set_x(100.0); paragraphParam->set_y(100.0); //  Document2D->ksParagraph(paragraphParam); //     for(unsigned int i = 0; i < dynamicArray->ksGetArrayCount(); ++i) { dynamicArray->ksGetArrayItem(i, textItemParam); Document2D->ksTextLine(textItemParam); } //  Document2D->ksEndObj(); //  textItemFont.Unbind(); textItemParam.Unbind(); paragraphParam.Unbind(); dynamicArray->ksDeleteArray(); dynamicArray.Unbind(); 


In diesem Beispiel werden die Ausgabezeilen zuerst in das DynamicArray geschrieben und erst dann in den Absatz ausgegeben. Auf diese Weise können Sie Informationen von der PrĂ€sentation trennen. Wenn das NEW_LINE- Flag in unserem Beispiel nicht verwendet wĂŒrde, könnten wir mit einem Aufruf der ksTextLine- Methode auskommen .

Das Ergebnis dieses Programms Àhnelt dem Ergebnis des vorherigen Beispiels.

Fazit

In dieser Lektion haben wir uns angesehen, wie Sie einen Absatz erstellen und ihn zum Anzeigen von mehrzeiligem Text verwenden. Wir haben auch gelernt, Informationen von ihrer PrÀsentation zu trennen. Leider erfordert die korrekte Ausgabe von mehrzeiligem Text das manuelle Durchlaufen eines Arrays von Zeichenfolgen. Dies ist nicht sehr praktisch. In der nÀchsten Lektion werde ich zeigen, wie dieses Problem gelöst werden kann.

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/de434336/


All Articles