KOMPAS-3D एपीआई → पाठ 13 → पैराग्राफ के साथ काम करें

यौगिक स्ट्रिंग्स बनाने के लिए प्रलेखित तरीकों पर आगे बढ़ने से पहले, हमें एक पैराग्राफ जैसे ऑब्जेक्ट के साथ खुद को परिचित करना होगा। यह कई पंक्तियों से मिलकर पाठ का स्वचालित रूप से प्रारूपित ब्लॉक है। इस पाठ में, हम सरल पैराग्राफ बनाने पर ध्यान देंगे।



सबक श्रृंखला की सामग्री "KOMPAS-3D API के साथ कार्य करना"


  1. मूल बातें
  2. ड्राइंग डिजाइन
  3. KOMPAS से सही संबंध
  4. मुख्य शिलालेख
  5. ग्राफिक आदिम
  6. विभिन्न स्वरूपों में एक दस्तावेज़ सहेजना
  7. सेटिंग्स जानने के लिए
  8. शीर्षक ब्लॉक में अधिक परिष्कृत लेखन विधियाँ
  9. कैप्शन कोशिकाओं को पढ़ना
  10. एक स्ट्रिंग सहित विशेष वर्ण
  11. सरल पाठ लेबल
  12. यौगिक तार
  13. पैराग्राफ
  14. बहुस्तरीय पाठ

पैरा पैरामीटर्स ( ksParagraphParam )


एक अनुच्छेद ksParagraphParam इंटरफ़ेस द्वारा वर्णित है। इसे पाने के लिए, आपको KompasObject इंटरफ़ेस के GetParamStruct विधि का उपयोग करने की आवश्यकता है, इसके लिए आपको इसे निरंतर ko_ParagraphParam ( 0x0000001B ) को पास करने की आवश्यकता है। KsParagraphParam इंटरफ़ेस के गुणों पर विचार करें।

कोण - डिग्री में पाठ का कोण। यह क्षैतिज रेखा वामावर्त से विलंबित है। KsText विधि के कोण पैरामीटर के समान।

ऊँचाई - मिलीमीटर में पैराग्राफ की ऊंचाई।

hFormat - स्वरूपण पाठ क्षैतिज रूप से। इस गुण का उपयोग तब किया जाता है जब पाठ चौड़ाई में पैराग्राफ में फिट नहीं होता है। मान्य मान नीचे दी गई तालिका में सूचीबद्ध हैं।



शैली - पाठ की शैली ( पाठ 11 में वर्णित)।

vFormat - पाठ को लंबवत स्वरूपित करना। इस संपत्ति का उपयोग तब किया जाता है जब पाठ ऊंचाई में पैराग्राफ में फिट नहीं होता है। मान्य मान नीचे दी गई तालिका में सूचीबद्ध हैं।



VFormat संपत्ति के साथ काम करते समय दो बातों को ध्यान में रखना है:

  1. KOMPAS प्रलेखन के अनुसार, vFormat संपत्ति के वैध मूल्य 0 और -1 हैं , लेकिन ऐसा नहीं है। मान्य मान 0 और 1 हैं
  2. कम्पास पात्रों की ऊंचाई को नहीं बदलता है। यह केवल लाइनों के बीच की दूरी को बदलता है। यदि लाइनों की ऊंचाई पैराग्राफ की ऊंचाई से कम है, तो वे ओवरलैप कर सकते हैं। इस तरह के ओवरले का एक उदाहरण नीचे की आकृति में है।



चौड़ाई - मिलीमीटर में पैराग्राफ की चौड़ाई।
गुण ऊंचाई , hFormat , vFormat और चौड़ाई हमें दिए गए आयत में पाठ रखने की समस्या को हल करने की अनुमति देते हैं। पाठ 11 में चर्चा की गई ksGetTextLength विधि की तुलना में यह विधि बहुत अधिक विश्वसनीय और कुशल है।

x और y लंगर बिंदु के निर्देशांक हैं। क्षैतिज अक्ष के साथ लंगर बिंदु के सापेक्ष पैराग्राफ की स्थिति ksDocument2D इंटरफ़ेस के ksSetTextAlign विधि द्वारा समायोजित की जाती है (हालांकि यह संभावना दस्तावेज नहीं है)। ऊर्ध्वाधर लंगर बिंदु हमेशा पैराग्राफ की पहली पंक्ति के नीचे से मेल खाता है। इस व्यवहार को बदला नहीं जा सकता।
KsParagraphParam इंटरफ़ेस में केवल एक विधि है: Init () । यह इंटरफ़ेस के गुण मान को इनिशियलाइज़ करता है। इसका कोई इनपुट पैरामीटर नहीं है। यदि सफल हो, तो सही है

अनुच्छेद निर्माण


एक पैराग्राफ बनाने में तीन अनुक्रमिक चरण होते हैं।

  1. पैराग्राफ की शुरुआत की घोषणा। ऐसा करने के लिए, ksDocument2D इंटरफ़ेस का ksParagraph विधि कहा जाता है । एकमात्र पैरामीटर के रूप में, यह विधि ksParagraphParam इंटरफ़ेस को स्वीकार करता है, जो पैराग्राफ के मापदंडों को निर्धारित करता है। सफल होने पर, ksParagraph विधि एक रिटर्न देती है, और एक त्रुटि के मामले में, शून्य रिटर्न करती है
  2. पैराग्राफ भरना। एक पैराग्राफ में प्रदर्शित प्रत्येक पंक्ति के लिए, ksDocument2D इंटरफ़ेस का ksTextLine विधि कहा जाता है । एकमात्र पैरामीटर के रूप में, यह स्ट्रिंग का वर्णन करने वाले ksTextItemParam या ksTextLineParam इंटरफ़ेस (लूप में पिछले पाठों में चर्चा की गई) को स्वीकार करता है। कृपया ध्यान दें कि आउटपुट लाइनों में वर्ण @ , $ , & , ~ , ^ और # शामिल नहीं होने चाहिए, क्योंकि वे नियंत्रण वर्ण हैं। उनके साथ काम चक्र के अगले पाठों में माना जाएगा।
  3. पैराग्राफ का अंत। ऐसा करने के लिए, ksEndObj () ksDocument2D इंटरफ़ेस की विधि को कहा जाता है । इसका कोई इनपुट पैरामीटर नहीं है और, यदि सफल हो, तो पूर्णांक पॉइंटर को बनाए गए ऑब्जेक्ट (पैराग्राफ) में लौटाता है। त्रुटि के मामले में, यह शून्य देता है

एक उदाहरण है। सबसे सरल पैराग्राफ


नीचे एक सरल पैराग्राफ के निर्माण का प्रदर्शन करते हुए कार्यक्रम का स्रोत कोड है।
//  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(); 


हमेशा की तरह, यहाँ, सादगी के लिए, दस्तावेज़ के निर्माण और निष्पादन के लिए जिम्मेदार कोड छोड़ा गया है (यह विषय पिछले पाठों में चर्चा की गई थी)।

इस उदाहरण में, KOMPAS स्वयं अपनी सामग्री के आधार पर पैराग्राफ का आकार निर्धारित करता है। नीचे दिया गया आंकड़ा उत्पन्न पैराग्राफ को दर्शाता है।



कृपया ध्यान दें: पाठ को एक पंक्ति के रूप में प्रदर्शित किया गया है। हमने पैराग्राफ की चौड़ाई निर्दिष्ट नहीं की है, इसलिए कोमपस स्वचालित रूप से आवश्यक के रूप में इसे बढ़ाता है। यदि चौड़ाई निर्धारित की गई थी, तो कम्पास व्यवहार ksParagraphParam इंटरफ़ेस की hFormat संपत्ति के मूल्य द्वारा निर्धारित किया जाएगा।

एक बहु-पंक्ति और मिश्रित पाठ बनाने के लिए, आपको पिछले पाठ में आंशिक रूप से चर्चा की गई ड्राइंग विशेषताओं का उपयोग करने की आवश्यकता है।

एक उदाहरण है। बहुस्तरीय पाठ


नई पंक्ति में स्पष्ट रूप से लपेटने के लिए, NEW_LINE ध्वज ( 0x1000 ) का उपयोग करें।

निम्नलिखित एक उदाहरण कार्यक्रम है जो इस ध्वज का उपयोग करके एक बहु-पंक्ति पैराग्राफ के निर्माण को प्रदर्शित करता है।
 //  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(); 


इस उदाहरण में, तीन-पंक्ति पैराग्राफ बनाया गया है। पहली पंक्ति हमेशा की तरह प्रदर्शित होती है। दूसरे के लिए, NEW_LINE ध्वज सेट किया गया है । वह एक नई पंक्ति की शुरुआत के बारे में बात करता है। तीसरे को हमेशा की तरह प्रदर्शित किया जाता है, लेकिन NEW_LINE ध्वज अभी भी इसके लिए सक्रिय है, क्योंकि हम ksTextItemParam इंटरफ़ेस के समान उदाहरण के साथ काम कर रहे हैं। नीचे दिया गया आंकड़ा इस कार्यक्रम द्वारा उत्पन्न पैराग्राफ को दर्शाता है।


अब लाइनें सही ढंग से प्रदर्शित होती हैं।

पैराग्राफ के साथ काम करने के लिए चुनौती


पाठ संरेखण


पाठ संरेखण ksDocument2D इंटरफ़ेस के ksSetTextLineAlign विधि द्वारा सेट किया गया है। इसका केवल एक पूर्णांक पैरामीटर है - संरेखण सेट करें। इसके मान्य मान नीचे दी गई तालिका में सूचीबद्ध हैं।



यदि सफल, ksSetTextLineAlign विधि पिछले संरेखण ध्वज को लौटाती है, और त्रुटि की स्थिति में, -1 रिटर्न करती है।

ध्यान दें कि ksSetTextLineAlign विधि का उपयोग केवल ब्लॉक के अंदर ही किया जा सकता है (हमारे मामले में, इसका उपयोग पैराग्राफ के अंदर किया जाता है)। इसका अर्थ है कि इसका उपयोग ksText विधि द्वारा पाठ आउटपुट के लिए संरेखण सेट करने के लिए नहीं किया जा सकता है। यह सीमा इस तथ्य के कारण है कि इस मामले में, KOMPAS को सम्मान के साथ नहीं पता है कि पाठ को किन सीमाओं के साथ संरेखित करने की आवश्यकता है।
एक अन्य महत्वपूर्ण बिंदु ksSetTextLineAlign पद्धति के दायरे से संबंधित है - यह किस आउटपुट लाइन को प्रभावित करता है। एक उदाहरण पर विचार करें (एक बहुत ही सरल वाक्यविन्यास का उपयोग उनके मूल की तुलना में यहां किया गया है):

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

लाइनों को कैसे संरेखित किया जाएगा? हमारी उम्मीदों के विपरीत, दोनों लाइनों को दाईं ओर संरेखित किया जाएगा। क्यों? तथ्य यह है कि सबसे पहले ksSetTextLineAlign विधि सबसे पहले अंतिम आउटपुट लाइन के संरेखण को बदलती है। यहां हमारे उदाहरण में क्या होता है: पहली पंक्ति केंद्र संरेखण सेट करती है। चूंकि कोई पिछली आउटपुट लाइन नहीं है, इसलिए यह कॉल डिफ़ॉल्ट संरेखण (बाएं) को बदलता है।

फिर हम लाइन "केंद्र" प्रिंट करते हैं। प्रारंभ में, यह पहले से निर्धारित केंद्र संरेखण का उपयोग करता है।

तीसरी पंक्ति में, हम फिर से संरेखण को बदलते हैं। सबसे पहले, विधि पिछली पंक्ति ("केंद्र") के संरेखण को बदलती है। इसलिए, यह दाईं ओर संरेखित है, और केंद्र से नहीं, जैसा कि हमने योजना बनाई थी। वही संरेखण डिफ़ॉल्ट रूप से संरेखित हो जाता है।
हम लाइन "राइट" प्रदर्शित करते हैं। चूँकि ksSetTextLineAlign विधि अब नहीं कहा जाता है, यह पहले से सेट संरेखण (दाईं ओर) का उपयोग करता है।
इस प्रकार, दोनों पंक्तियों को दाईं ओर संरेखित किया गया है। अब उदाहरण को थोड़ा बदलते हैं:

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

हम सब बदल दिया संरेखण को बदलने के बिना एक खाली स्ट्रिंग के आउटपुट को जोड़ रहे थे। अब लाइनें सही ढंग से प्रदर्शित होती हैं। ऐसा इसलिए होता है क्योंकि एक रिक्त स्ट्रिंग का आउटपुट सेट सही संरेखण को "अवशोषित" करता है। KsSetTextLineAlign पद्धति की दूसरी कॉल एक खाली रेखा को प्रभावित करती है और किसी भी तरह से केंद्र रेखा को प्रभावित नहीं करती है।
नीचे दिया गया उदाहरण खाली स्ट्रिंग प्रदर्शित किए बिना सही संरेखण दिखाता है।

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

कॉल ksTextLine और ksSetTextLineAlign स्वैप किए गए हैं। चूँकि ksSetTextLineAlign मेथड मुख्य रूप से अंतिम प्रदर्शित लाइन को प्रभावित करता है, अलाइनमेंट्स को सही तरीके से सेट किया जाता है, और लाइनों को वैसे ही प्रदर्शित किया जाता है जैसा हम चाहते थे।

उदाहरण


निम्नलिखित एक प्रोग्राम का स्रोत कोड है जो एक अनुच्छेद में पाठ संरेखण प्रदर्शित करता है।
 //  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(); 


इस उदाहरण में, पाठ संरेखण के अलावा, ksParagraphParam इंटरफ़ेस की चौड़ाई और hFormat गुणों का उपयोग भी प्रदर्शित किया जाता है। इसका उपयोग इसकी चौड़ाई को सीमित करने के लिए किया जाता है। यदि हमने उन्हें नहीं बदला, तो KOMPAS पैराग्राफ की चौड़ाई बढ़ाएगा, और हम बाईं ओर और चौड़ाई में संरेखण नहीं देखेंगे।

पैराग्राफ की पठनीयता को सुधारने के लिए खाली लाइनों को प्रदर्शित किया जाता है। वे सही संरेखण को प्रभावित नहीं करते हैं।

नीचे दिया गया आंकड़ा इस कार्यक्रम द्वारा उत्पन्न पैराग्राफ को दर्शाता है।



स्टाइल चालू या बंद करें


चक्र के 11 वें पाठ में, हमने उन झंडों की जांच की जो शैली को नियंत्रित करते हैं ( ITALIC_ON , ITALIC_OFF , BOLD_ON , UNDERLINE_ON और UNDERLINE_OFF )। फिर हमने ksText विधि के संबंध में उनकी जांच की। एक पैराग्राफ में उनके उपयोग के बीच एक महत्वपूर्ण अंतर यह है कि कार्रवाई ksTextLine विधि को कॉल करने तक सीमित नहीं है, लेकिन पूरे पैराग्राफ तक फैली हुई है। आइए कुछ उदाहरण देखें।

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

पहली पंक्ति को बोल्ड में प्रदर्शित किया जाएगा। इससे कोई सवाल नहीं है। लेकिन दूसरी पंक्ति को कैसे प्रदर्शित किया जाएगा? ध्वज BOLD_ON को उसके लिए रीसेट कर दिया गया है । इसलिए, हम यह मान सकते हैं कि इसे नियमित फ़ॉन्ट में प्रदर्शित किया जाएगा। लेकिन ऐसा है नहीं। BOLD_ON ध्वज से मिलने के बाद, KOMPAS कमांड को निम्नानुसार समझता है: इस पैराग्राफ़ की सभी बाद की पंक्तियों को बोल्ड में प्रदर्शित किया गया है। इसलिए, बाद की सभी पंक्तियों को पैराग्राफ पूरा होने तक बोल्ड में प्रदर्शित किया जाता है या KOMPAS इसके साथ BOLD_OFF ध्वज युग्म का सामना करता है । एक उदाहरण पर विचार करें:

 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); 

पहली पंक्ति बोल्ड में प्रदर्शित की गई है। दूसरी पंक्ति के लिए, हम BOLD_ON ध्वज को साफ़ करते हैं और BOLD_OFF ध्वज को उसके साथ जोड़ते हैं, जो बोल्ड शैली को रद्द करता है। इसके कारण, दूसरी और तीसरी पंक्तियों को बिना बोले प्रदर्शित किया जाता है।

यह व्यवहार ITALIC_ON , ITALIC_OFF , UNDERLINE_ON और UNDERLINE_OFF पर लागू होता है, लेकिन NEW_LINE ध्वज पर लागू नहीं होता है, क्योंकि इसमें ओवरराइडिंग फ़्लैग की एक जोड़ी नहीं होती है।

उदाहरण


निम्नलिखित कार्यक्रम का स्रोत कोड है, जिसमें पैराग्राफ का उपयोग करके विभिन्न शैलियों के साथ पाठ का आउटपुट दिखाया गया है।
 //  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(); 


इस कार्यक्रम का सबसे महत्वपूर्ण हिस्सा आउटपुट लाइनों के लिए झंडे की उचित सेटिंग है। आइए इसे और अधिक विस्तार से विश्लेषण करें (कार्यक्रम की संबंधित पंक्तियों को " // " वर्णों की एक जोड़ी के साथ चिह्नित किया गया है)।

पहली पंक्ति को बिना किसी बदलाव के प्रदर्शित किया जाता है। इसलिए, इसके लिए कोई झंडे नहीं लगाए गए हैं।

दूसरी पंक्ति को एक ढलान के बिना और एक नई रेखा के साथ प्रदर्शित किया जाना चाहिए। इसलिए, इसके लिए झंडे लगाए गए हैं : NEW_LINE (एक नई पंक्ति पर शुरू) और ITALIC_OFF ( इटैलिक अक्षम करें)।

तीसरी पंक्ति इटैलिक्स और बोल्ड में दिखाई देनी चाहिए। ऐसा करने के लिए, हम झंडे लहराते हैं: NEW_LINE , ITALIC_ON (italics सक्षम करें ) और BOLD_ON (बोल्ड चेहरे सक्षम करें )। अन्य सभी झंडे रीसेट हैं।

चौथी पंक्ति को इटैलिक में मुद्रित किया जाना चाहिए, रेखांकित और बोल्ड नहीं होना चाहिए। ऐसा करने के लिए, हम झंडे लहराते हैं: NEW_LINE , BOLD_OFF (पिछली पंक्ति से बाएं बोल्ड, अक्षम करें) और UNDERLINE_ON ( रेखांकित सक्षम करें)।

यदि पैराग्राफ में अधिक लाइनें थीं, तो वे इटैलिक रेखांकित फ़ॉन्ट में प्रदर्शित होंगे। रेखांकित शैली को अक्षम करने के लिए, आपको UNDERLINE_ON ध्वज को साफ़ करना होगा और UNDERLINE_OFF ध्वज को लादना चाहिए।

नीचे दिया गया आंकड़ा इस कार्यक्रम का परिणाम दिखाता है।



जानकारी को प्रस्तुति से अलग करना


यदि आप अपने कार्यक्रमों की संरचना का पालन करते हैं, तो आपने संभवतः पिछले उदाहरण का एक गंभीर दोष देखा है: आउटपुट उत्पन्न करने के लिए जिम्मेदार कोड इसके आउटपुट को लागू करने के लिए जिम्मेदार कोड के साथ मिलाया जाता है। एक अच्छी प्रोग्रामिंग शैली के साथ, यह अपनी प्रस्तुति से अलग जानकारी के लिए प्रथागत है।

यदि आउटपुट जानकारी में ksTextItemParam की कई लाइनें शामिल हैं , तो उन्हें एक इंटरफ़ेस ksTextLineParam में जोड़ा जा सकता है। KsTextLine विधि इन दोनों इंटरफेस को संभाल सकती है। लेकिन इस दृष्टिकोण में एक अप्रिय सीमा है: यदि ksTextLine विधि ksTextLineParam इंटरफ़ेस को स्वीकार करता है, तो NEW_LINE (और SPECIAL_SYMBOL_END ) झंडों को अनदेखा किया जाता है। अर्थात्, सभी जानकारी एक पंक्ति पर प्रदर्शित की जाएंगी, भले ही NEW_LINE ध्वज कुछ ksTextItemParamPances के लिए सेट किया गया हो। इस सीमा के आसपास काम करने के लिए, आपको प्रत्येक पंक्ति के लिए मैन्युअल रूप से ksTextLine को कॉल करना होगा।

इस तकनीक का प्रदर्शन करने वाले एक उदाहरण के लिए निम्नलिखित स्रोत कोड है।
 //    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(); 


इस उदाहरण में, आउटपुट लाइनों को पहले डायनामैरेयर पर लिखा जाता है, और उसके बाद ही पैराग्राफ को आउटपुट दिया जाता है। यह आपको इसकी प्रस्तुति से जानकारी को अलग करने की अनुमति देता है। यदि हमारे उदाहरण में NEW_LINE ध्वज का उपयोग नहीं किया गया था, तो हम ksTextLine विधि में एक कॉल के साथ प्राप्त कर सकते हैं।

इस कार्यक्रम का परिणाम पिछले उदाहरण के परिणाम के समान है।

निष्कर्ष

इस पाठ में, हमने देखा कि एक पैराग्राफ कैसे बनाया जाए और मल्टी-लाइन टेक्स्ट प्रदर्शित करने के लिए इसका उपयोग कैसे किया जाए। हमने इसकी प्रस्तुति से जानकारी को अलग करना भी सीखा। दुर्भाग्य से, बहु-पंक्ति पाठ के सही आउटपुट में स्ट्रिंग के एक सरणी के मैनुअल ट्रैवर्सल की आवश्यकता होती है। यह बहुत सुविधाजनक नहीं है। अगले पाठ में मैं दिखाऊंगा कि इस समस्या को कैसे हल किया जाए।

जारी रखने के लिए, ब्लॉग की खबरों का पालन करें।

सर्गेई नोरसेव, पीएचडी, "डेल्फी में कम्पास के लिए अनुप्रयोग विकास" पुस्तक के लेखक।

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


All Articles