http://www.netgocn.com الأصلي
جميع الأزرار ليس لها لون في برامج Windows القياسية. لذلك ، لا تحتوي جميع مكونات الأزرار التي توفرها Delphi أيضًا على سمات ألوان.
هنا أقدم طريقة لتصنيع أزرار الأمونيوم باستخدام مكونات مخصصة. قم بتغيير اللون عند الإرادة أثناء مرحلة التصميم ، تمامًا مثل المكونات التي توفرها Delphi نفسها (يتم الكود في هذه المقالة بموجب Delphi 4.0).
الخطوة الأولى
افتح Delphi ، حدد خيار المكون/المكون الجديد في القائمة ، وقم بتعبئة مربع المنسدلة من نوع السلف يدويًا سيتم إكماله بناءً على ذلك. سيتم ملء بقية محتوى الكتابة في مربع الحوار كما يحلو لك ، ولكن يجب أن تلاحظ أن اسم الفصل لا يمكن أن يكون هو نفسه اسم الفئة (بما في ذلك مخصصة) ، ويجب أن تتذكر أيضًا أنه يتم تعريفه موقع التثبيت للمكون (المحتوى في مربع المنسدلة في صفحة لوحة اللوحة) وموقع تخزين ملفات الوحدة على القرص (محتوى مربع تحرير اسم ملف الوحدة) ، وإلا أين ستجدها في المستقبل ؟
الخطوة 2
بعد الانتهاء من العمل أعلاه ، ستقوم Delphi تلقائيًا بإنشاء رمز مكون أساسي لك. (تم حذف هذه المقالة فقط. يجب حفظ جميع التعليقات التي تم إنشاؤها تلقائيًا).
الخطوة 3
أضف رمزنا في إطار الرمز أعلاه ، بالطبع هذا هو العمل الرئيسي الذي نريد القيام به.
1. قم بتعديل جزء تعريف نوع البيانات من ملف الوحدة الذي تم إنشاؤه تلقائيًا بواسطة Delphi إلى:
يكتب
tbutton1 = الفصل (tbutton)
خاص
fcolor: tcolor ؛
fcanvas: tcanvas ؛
isfocused: منطقية ؛
الإجراء setColor (القيمة: tcolor) ؛
الإجراء cndrawitem (var message: twmdrawitem) ؛
محمية
الإجراء CreateParams (var params: tcreateparams) ؛
الإجراء setButtonStyle (Adefault: Boolean) ؛
عام
إنشاء مُنشئ (مالك: tcomponent) ؛
المدمرة تدمير.
المنشورة
Property Color: Tcolor قراءة fcolor اكتب setColor الافتراضي Clwhite ؛
نهاية؛
يوضح:
أ.
ب.
ج. اجعل الفصل لا يمكن الوصول إليه في الخارج.
2. يمكن أن يتجاهل سجل العملية التلقائية لـ Delphi. بعد هيئة العملية ، نضيف الرمز التالي يدويًا قبل النهاية.
// *** مُنشئ **************************************** ** **********
مُنشئ tbutton1.create (Oenler: tcomponent) ؛
يبدأ
خلق ورث (مالك) ؛
fcanvas: = tcanvas.create ؛
fcolor: = clwhite ؛ // اللون الافتراضي
نهاية؛
// *** Destructor ********************************************** ********
Destructor tbutton1.destroy ؛
يبدأ
fcanvas.free ؛
تدمير الموروث.
نهاية؛
// *** لتحديد نمط الزر ، يجب إعادة تعريف الزر كزر مرسوم ذاتيًا *********************
الإجراء tbutton1.createparams (var params: tcreateparams) ؛
يبدأ
الموروثة CreateParams (params) ؛
مع params نمط: = النمط أو bs_ownerdraw ؛
نهاية؛
// *** طريقة كتابة السمة ******************************************** ******* *******
الإجراء tbutton1.setColor (القيمة: tcolor) ؛
يبدأ
fcolor: = القيمة ؛
تبطل
نهاية؛
// *** SET BUNTY حالة ********************************************** ****** ****
الإجراء tbutton1.setButtonStyle (Adefault: Boolean) ؛
يبدأ
إذا adefault <> isFocused ثم
يبدأ
isfocused: = adefault ؛
ينعش؛
نهاية؛
نهاية؛
// *** ارسم زر ****************************************** ******
الإجراء tbutton1.cndrawitem (var message: twmdrawitem) ؛
var
Isdown ، Isdefault: Boolean ؛
ARECT: TRECT ؛
الأعلام: Longint ؛
DrawItemStruct: tdrawitemstruct ؛
WH: tsize.
يبدأ
DrawItemStruct: = message.drawitemStruct^؛
fcanvas.handle: = drawItemStruct.hdc ؛
arect: = clientRect ؛
مع DrawItemStruct
يبدأ
Isdown: = itemState و ODS_Selected <> 0 ؛
isDefault: = itemState و ODS_FOCUS <> 0 ؛
نهاية؛
الأعلام: = dfcs_buttonpush أو dfcs_adjustrect ؛
إذا كان Irdown ثم الأعلام: = أعلام أو dfcs_pushed ؛
إذا كانت drawItemStruct.itemState و ODS_Disabled <> 0 ثم
أعلام: = أعلام أو DFCS_INACTION ؛
إذا لم يتم التركيز أو isDefault ثم
يبدأ
// ارسم الحالة عندما يتم التركيز على الزر
fcanvas.pen.color: = clwindowframe ؛
fcanvas.pen.width: = 1 ؛
fcanvas.brush.style: = bsClear ؛
fcanvas.rectangle (arect.left ، arect.top ، arect.right ، arect.bottom) ؛
inflaterect (arect ، -1 ، -1) ؛
نهاية؛
fcanvas.pen.color: = clbtnshadow ؛
fcanvas.pen.width: = 1 ؛
fcanvas.brush.color: = fcolor ؛
إذا is isdown ثم ابدأ
// ارسم الحالة عند الضغط على الزر
fcanvas.rectangle (arect.left ، arect.top ، arect.right ، arect.bottom) ؛
inflaterect (arect ، -1 ، -1) ؛
إنهاء آخر
// ارسم زرًا غير مضغوط
DrawFrameControl (DrawItemStruct.hdc ، arect ، dfc_button ، flags) ؛
fcanvas.fillRect (arect) ؛
// ارسم محتوى نص التسمية التوضيحية
fcanvas.font: = self.font ؛
arect: = clientRect ؛
wh: = fcanvas.textextent (caption) ؛
fcanvas.pen.width: = 1 ؛
fcanvas.brush.style: = bsClear ؛
إذا لم يتم تمكينها بعد ذلك
ابدأ / / عندما يفشل الزر ، يجب عليك رسم نص التسمية التوضيحية مرة أخرى
fcanvas.font.color: = clbtnhighlight ؛
fcanvas.textout ((عرض Div 2)-(WH.CX Div 2) +1 ،
(ارتفاع Div 2)-(Wh.cy Div 2) +1 ،
التسمية التوضيحية)؛
fcanvas.font.color: = clbtnshadow ؛
نهاية؛
fcanvas.textout ((عرض Div 2)-(Wh.cx div 2) ، (الارتفاع div 2)-(wh.cy div 2) ، caption) ؛
// ارسم الخط المنقط للإطار الداخلي عندما تحصل على التركيز
إذا تم التركيز و isDefault ثم
يبدأ
arect: = clientRect ؛
inflaterect (arect ، -4 ، -4) ؛
fcanvas.pen.color: = clwindowframe ؛
fcanvas.brush.color: = fcolor ؛
DrawFocusRect (fcanvas.handle ، arect) ؛
نهاية؛
fcanvas.handle: = 0 ؛
نهاية؛
//** النهاية ******************************************** ****************
نهاية.
الخطوة 4: بعد التحقق من صحة الخطأ ، حدد خيار المكون/التثبيت في قائمة Delphi. عنصر.
إذا اتبعت هذه المقالة تمامًا ، بعد تجميع وتثبيت بشكل صحيح ، يمكنك العثور على زر مع نفس أيقونة Tbutton في علامة التبويب عينات من ملصق مكون Delphi. قم بإنشاء مشروع جديد ووضع هذا الزر الذي نستخدمه في النموذج. ماذا عن ذلك؟ من خلال خاصية اللون الخاصة به ، تقوم بتعيين لونه حسب الرغبة.
أخيرًا ، تعتمد طريقة رسم الزر في هذه المقالة طريقة رسم مماثلة مثل Tbutton من Delphi لتحقيق مظهر مماثل كزر Delphi. ومع ذلك ، إذا كنت ترغب في اللعب ، فيمكنك رسم أي نص ورسومات على قماش FCANVAS الذي تريد التعبير عنه من شخصيتك.
إذا كان لديك أي أسئلة ، فيرجى إرسال رسالة أو ترك رسالة.
مرحبًا بك لتجربة برنامج هذا الموقع: NetGocn (الشبكة)