العمل مع KOMPAS-3D API → الدرس 14 → نص متعدد الخطوط

في الدرس السابق ، درسنا كيفية عرض نص متعدد الأسطر باستخدام فقرة. تتطلب الطريقة الموضحة اجتياز يدوي لصفيف سلاسل الإخراج. في هذا الدرس ، سننظر في طريقة بديلة دون هذا العيب. يعتمد على واجهة ksTextParam وطريقة ksTextEx .



محتوى سلسلة الدروس "العمل مع KOMPAS-3D API"


  1. الأساسيات
  2. رسم التصميم
  3. الاتصال الصحيح ل KOMPAS
  4. النقش الرئيسي
  5. بدائية الرسم
  6. حفظ وثيقة في أشكال مختلفة
  7. التعرف على الإعدادات
  8. طرق الكتابة الأكثر تطوراً في كتلة العنوان
  9. قراءة خلايا التسمية التوضيحية
  10. شخصيات خاصة بما في ذلك سلسلة
  11. تسميات نصية بسيطة
  12. سلاسل مركب
  13. الفقرات
  14. نص متعدد الخطوط

خيارات النص ( ksTextParam )


واجهة ksTextParam هي وظيفة إضافية لواجهة ksParagraphParam ومجموعة من سلاسل الإخراج. للحصول عليه ، تحتاج إلى استدعاء الأسلوب GetParamStruct للواجهة KompasObject مع ko_TextParam ثابت.
لا تحتوي واجهة ksTextParam على خصائص ، لذلك ننتقل فورًا إلى التفكير في أساليبها.
إرجاع GetParagraphParam () - واجهة المعلمة للفقرة ksParagraphParam. لا يوجد لديه معلمات الإدخال.
GetTextLineArr () - بإرجاع صفيف ديناميكي ksDynamicArray من خطوط الإخراج. لا يوجد لديه معلمات الإدخال.
Init () - إعادة تعيين معلمات النص. لا يوجد لديه معلمات الإدخال. إذا نجحت ، يعود صحيح.
SetParagraphParam - يعين معلمات الفقرة. كمعلمة فقط ، فإنه يقبل واجهة ksParagraphParam التي تحتوي على المعلمات القابل للتعيين. إذا نجحت ، تُرجع true ، وفي حالة حدوث خطأ ، خطأ .
SetTextLineArr - تعيين صفيف سلاسل الإخراج. كمعلمة فقط ، فإنه يأخذ واجهة ksDynamicArray التي تحتوي على خطوط الإخراج. إذا نجحت ، تُرجع true ، وفي حالة حدوث خطأ ، خطأ .
الصفيف الحيوي الذي تم إرجاعه بواسطة الأسلوب GetTextLineArr () وتعيينه بواسطة الأسلوب SetTextLineArr من النوع TEXT_LINE_ARR . هذا يعني أن عناصر الصفيف هي واجهات ksTextLineParam .

طريقة KsTextEx


لعرض نص متعدد الأسطر ، استخدم طريقة ksTextEx للواجهة ksDocument2D . يوجد أدناه نموذج أولي منه:

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

يعرض الجدول أدناه القيم الصالحة للمعلمة المحاذاة .



إذا نجحت ، ترجع طريقة ksTextEx مؤشر عدد صحيح إلى النص الذي تم إنشاؤه. وفي حالة وجود خطأ - صفر .

مثال


فيما يلي مقتطف من برنامج يوضح إخراج النص متعدد الأسطر باستخدام طريقة 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(); 


في هذا المثال ، لا نتجاوز الصفيف ، ولكننا نطلب الطريقة المرغوبة مرة واحدة. يجد أعلام NEW_LINE ويفسرها بشكل صحيح. يرجى ملاحظة: يتم إصدار كل سطر جديد مع هذه العلامة في واجهة ksTextLineParam منفصلة. إذا وضعتهم في ksTextLineParam واحد ، فسيتجاهل COMPAS علامة NEW_LINE . يوضح الشكل أدناه نتيجة هذا البرنامج.



الخاتمة

في هذا الدرس ، نظرنا في طريقة بديلة لعرض نص متعدد الخطوط. إنه أكثر تعقيدًا إلى حد ما مما درسناه سابقًا ، لكنه لا يتطلب اجتيازًا يدويًا لمجموعة من السلاسل. أي واحد للاستخدام متروك لك.

في الدرس التالي ، سنعود إلى موضوع الخطوط المركبة وننظر إلى الطريقة الموثقة لإنشاءها باستخدام الفقرات.

للاستمرار ، تابع أخبار المدونة.

سيرجي نورسيف ، مؤلف كتاب "تطوير التطبيقات لـ COMPAS في دلفي".

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


All Articles