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

محتوى سلسلة الدروس "العمل مع KOMPAS-3D API"
- الأساسيات
- رسم التصميم
- الاتصال الصحيح ل KOMPAS
- النقش الرئيسي
- بدائية الرسم
- حفظ وثيقة في أشكال مختلفة
- التعرف على الإعدادات
- طرق الكتابة الأكثر تطوراً في كتلة العنوان
- قراءة خلايا التسمية التوضيحية
- شخصيات خاصة بما في ذلك سلسلة
- تسميات نصية بسيطة
- سلاسل مركب
- الفقرات
- نص متعدد الخطوط
خيارات النص ( 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 في دلفي".