استخدم وظائف API لتنفيذ النماذج "غير النمطية" في DELPHI
من أجل جذب المستخدمين، تولي بعض البرامج التجريبية الحالية، وخاصة بعض برامج تشغيل الوسائط المتعددة، اهتمامًا كبيرًا بتصميم واجهة البرنامج. في الواقع، يمكننا أيضًا استخدام وظائف API لتحقيق تلك التأثيرات الجميلة والبديلة.
1. شكل ذو شكل خاص
هل يمكن أن يكون الشكل مربعًا فقط؟ لا، هناك أشكال أخرى ممكنة. يتطلب هذا استخدام وظيفتين لـ Win32 API. أولاً، استخدم الدالة CreateRoundRectRgn() لتعريف منطقة بيضاوية داخل النموذج. المنطقة المشار إليها هنا هي كائن API خاص يمكننا إجراء عمليات مثل التعبئة والقص داخل المنطقة لتحديد الخصائص الخارجية للنموذج. ثم قم باستدعاء الدالة SetWindowRgn() للرسم علاوة على ذلك، يمكنك استخدام الدالة CombineRgn() لدمج مناطق متعددة. على سبيل المثال، قم بإضافة الكود التالي إلى ملف وحدة دلفي:
الإجراء TForm1.FormCreate(Sender: TObject);
فار
FRegion1:Thandle؛
FRegion2:المقبض؛
يبدأ
FRegion1:=CreateRoundRectRgn(20,20,200,200,300,300);//حدد منطقة بيضاوية الشكل
FRegion2:=CreateRectRgn(170,170,400,400);//حدد منطقة مستطيلة
CombineRgn(FRegion1,FRegion1,FRegion2,RGN_OR);// قم بتوصيل منطقتين
SetwindowRgn(handle,FRegion1,True);// ارسم المنطقة المتصلة
نهاية؛
يتم استخدام الدالة CreateRoundRectRgn() في مقطع البرنامج لإنشاء منطقة مستطيلة مستديرة، ونموذجها الأولي هو:
HRGN إنشاءRoundRectRgn(
int nLeftRect,//X إحداثي الزاوية اليسرى العليا
int nTopRect,//Y إحداثي الزاوية اليسرى العليا
int nRightRect,//X إحداثي الزاوية اليمنى السفلى
int nBottomRect,//Y إحداثي الزاوية اليمنى السفلى
int nWidthEllipse,// عرض الشكل الناقص حيث توجد الزاوية المستديرة
int nHeightEllipse // ارتفاع القطع الناقص حيث تقع الزاوية المستديرة
);
الرسومات الأخرى مثل المضلعات والقطع الناقص وما إلى ذلك لها وظائف API المقابلة لها كما يلي:
HRGN CreateEllipticRgn(int nLeftRect،int nTopRect،int nRightRect،int nBottomRect)
HRGN CreateEllipticRgnIndirect( CONST RECT *lprc)
HRGN CreatePolygonRgn(CONST POINT *lPPT,int cPoints, int fnPolyFillMode)
HRGN CreatepolypolygonRgn(CONST POINT *lppt,CONST INT *lpPolyCounts,int nCount,int fnPolyFillMode)
HRGN CreateRectRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
HRGN CreateRectRgnIndirect(CONST RECT *lprc)
من السهل فهم معلمات الوظيفة المذكورة أعلاه وتستخدم للإشارة إلى إحداثيات المستطيل المدمج في الرسم أو الإشارة إلى المستطيل. دعونا نركز على الوظيفتين الأخريين:
النموذج الأولي للوظيفة: SetWindowRgn(
HWND hWnd، // مقبض النموذج الحالي
HRGN hRgn، // مقبض المنطقة الحالية
BOOL bRedraw، // إعادة رسم الشعار
)
الوظيفة: تقوم هذه الوظيفة بتمرير مقبض المنطقة التي تم إنشاؤها كمعلمة إلى مقبض النموذج الحالي، وترسم النموذج داخل المنطقة؛
النموذج الأولي للوظيفة: CombineRgn(
HRGN hrgnDest، // مقبض للاتصال بمنطقة الوجهة
HRGN hrgnSrc1, // المقبض الأول للاتصال بمنطقة المصدر
HRGN hrgnSrc2, // مقبض منطقة مصدر الاتصال الثانية
int fnCombineMode // وضع الاتصال
)
الوظيفة: تقوم هذه الوظيفة بدمج منطقتين في منطقة جديدة، حيث يمكن أن يأخذ وضع الاتصال القيم التالية:
تأثير قيمة المعلمة
يقوم RGN_AND بإنشاء منطقة جديدة من تقاطع الأجزاء المشتركة للمنطقة 1 والمنطقة 2
يقوم RGN_COPY بإنشاء نسخة من المنطقة 1 كمنطقة جديدة
يقوم RGN_DIFF بتوصيل الأجزاء التي تنتمي إلى المنطقة 1 وليس المنطقة 2 بمنطقة جديدة
RGN_OR يربط جميع أجزاء المنطقة 1 والمنطقة 2، أي الاتحاد
RGN_XOR. قم بتوصيل جميع أجزاء المنطقة 1 والمنطقة 2 وإزالة الأجزاء المشتركة
2. شكل مجوف
ومما يميز هذا الشكل أنه شكل ذو طرفين، ويحفر جزء في وسطه. على سبيل المثال، أضف الكود التالي إلى ملف وحدة دلفي:
الإجراء TForm1.FormCreate(Sender: TObject);
فار
FRegion3:المقبض؛
يبدأ
Canvas.Font.Name:='Chinese Xingkai';//تعيين الخط
Canvas.Font.Size:=100;// اضبط حجم الخط
BeginPath(Canvas.Handle); // احصل على المخطط التفصيلي المرسوم على الفانفاس
TextOut(form1.Canvas.Handle,0,20,'Program Spring and الخريف',8);// اقطع المساحة التي تشغلها الكلمات الأربع "برنامج الربيع والخريف"
EndPath(Canvas.Handle);
FRegion3:=PathToRegion(Canvas.Handle);// قم بتعيين المنطقة أعلاه للنموذج
SetwindowRgn(Handle,FRegion3,True);//ابدأ الرسم
نهاية؛
يتم استخدام ثلاث وظائف API بشكل أساسي هنا:
النموذج الأولي للوظيفة: BOOL BeginPath (HDC hdc // مقبض بيئة الجهاز)
الوظيفة: البدء في تلقي مسار مسار بيئة الجهاز الحالية؛
النموذج الأولي للوظيفة: BOOL EndPath(HDC hdc // مقبض بيئة الجهاز)
الوظيفة: إيقاف الاستلام وتعيين مسار المسار المستلم لمقبض بيئة الجهاز الحالية
النموذج الأولي للوظيفة BOOL TextOut(
HDC hdc، // التعامل مع سياق الجهاز
int nXStart,//X إحداثي موضع البداية
int nYStart,// إحداثي Y لموضع البداية
LPCTSTR lpString,//عنوان السلسلة
int cbString // عدد الأحرف الموجودة في السلسلة (لاحظ أن حرفًا صينيًا واحدًا يشغل حرفين)
)
الوظيفة: ارسم السلسلة المعطاة في الموضع المحدد.
ملخص: يعد تعلم استخدام واجهات برمجة التطبيقات للبرمجة بكفاءة مهارة مهمة جدًا، وفي بعض الأحيان يمكن أن تحقق نتائج غير متوقعة. تهدف التقنيات المذكورة أعلاه إلى إلهام الآخرين وآمل أن تتمكن من الاستفادة الكاملة من التقنيات المختلفة واستخدام خيالك لتصميم المزيد من الأشكال المبهرة وتجميل برامجك الخاصة.