الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تغيير ألوان Menus في الدوت نت

بدأه a_pess في 9 مارس 2009 · 1 رد · 766 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تغيير ألوان Menus في الدوت نت

اللغة المستخدمة: الفيجوال بيسك

التطبيق: فيجوال استوديو 2005 و 2008

المستوي: التقييم متروك للقارئ

إعداد: مهندس / عمر أمين إبراهيم

في هذا المقال سنناقش معا كيفية تغيير شكل كل من MenuStrip و ContextMenuStrip و ToolStrip وأيضا StatusMeunuStrip لكي نجعلهم جميعا يأخذون شكلا وألوانا جديدة حسب رغبتنا

وسنحاول أن نفعل ذلك بأقل مجهود يذكر وبدون أن نرسم أي شئ حيث أن كل ذلك سيتم عن طريق التعامل مع الألوان وكلمة السر في كل ذلك هي كلاس واحد فقط وهذا الكلاس موجود في الدوت نت واسمه ProfessionalColorTable Class ومايكروسوفت وكما أشارت عند تعريفها لهذا الكلاس بأنها تستخدم هذا الكلاس لتغيير ألوان بعض العناصر المستخدمة في برنامج الأوفيس MS Office وهذا التعريف ليس دقيقا مائة بالمائة فهم يستخدمونه أيضا مع بعض البرامج الأخري وعلي سبيل المثال لو نظرت الي ألوان القوائم الموجودة في الفيجوال استوديو ستجد أن ألوانها تختلف تماما عن الأوفيس إذن كيف نستفيد نحن أيضا من هذا الكلاس؟

لو نظرنا الي هذا الكلاس عن قرب سنجد أن جميع الصفات Properties الموجودة بهذا الكلاس وعددهم تحديدا عبارة عن 57 صفة سنكتشف أنها تمثل مجموعة من الألوان لا غير وكما تلاحظون أن عدد هذه الصفات كبير لذلك عليك عزيزي القارئ أن تفتح ملف Help في الفيجوال استوديو وحاول أن تقرأ و تتعرف عن الهدف من كل ًصفة موجودة بهذا الكلاس

عموما الفكرة هنا وببساطة شديدة هي أننا علينا بناء كلاس شبيه بهذا الكلاس عن طريق استخدام الوراثة ثم نقوم بعمل Override لصفات الكلاس ونغير الألوان الي أي ألوان نريدها ثم نمرر هذا الكلاس الي كل من MenuStrip و ContextMenuStrip و ToolStrip وأيضا StatusMeunuStrip ويتم تمرير الكلاس الذي تم بناؤه عن طريق استخدام كلاس أخر موجود في الدوت نت وهو ToolStripProfessionalRenderer Class

وفي المثال التالي سنتعرف علي كيفية عمل ذلك حيث هنا سوف نقوم بتغيير ألوان Menus ولتنفيذ المثال افتح مشروع جديد ثم عليك أن تضيف الي الفورم MenuStrip و ContextMenuStrip و ToolStrip وأيضا StatusMeunuStrip وهي عناصر قلما يخلو منها أي فورم ثم عليك أن تضيف الي المشروع كلاس أخر وأعطه أي اسم تريد وهنا سوف أعطي هذا الكلاس اسم MenuColoring ثم وباستخدام الوراثة للكلاس ProfessionalColorTable سنقوم بعمل Override لبعض صفاته ثم نمرره بعد ذلك الي كل من MenuStrip و ContextMenuStrip و ToolStrip وأيضا StatusMeunuStrip والكود التالي يوضح شكل هذا الكلاس



Inherits ProfessionalColorTable
Dim fb As Color = Color.FromArgb(61, 94, 195)
Dim cb As Color = Color.OrangeRed

Dim alpha As Integer = 150
Dim beta As Integer = 200

Public Overrides ReadOnly Property ImageMarginGradientMiddle() As System.Drawing.Color
Get
Return Color.Red
End Get
End Property

Public Overrides ReadOnly Property ToolStripDropDownBackground() As System.Drawing.Color
Get
Return Color.FromArgb(alpha, fb)
End Get
End Property

Public Overrides ReadOnly Property ToolStripGradientBegin() As System.Drawing.Color
Get
Return Color.FromArgb(255, 128, 128)
End Get
End Property

Public Overrides ReadOnly Property ToolStripGradientEnd() As System.Drawing.Color
Get
Return Color.Red
End Get
End Property

Public Overrides ReadOnly Property ToolStripGradientMiddle() As System.Drawing.Color
Get
Return Color.FromArgb(255, 128, 128)
End Get
End Property

Public Overrides ReadOnly Property StatusStripGradientBegin() As Color
Get
Return Color.FromArgb(255, 128, 128)


End Get
End Property

Public Overrides ReadOnly Property StatusStripGradientEnd() As Color
Get
Return Color.Red

End Get
End Property

Public Overrides ReadOnly Property MenuStripGradientBegin() As System.Drawing.Color
Get
Return Color.Red
End Get
End Property

Public Overrides ReadOnly Property MenuStripGradientEnd() As System.Drawing.Color
Get
Return fb
End Get
End Property

Public Overrides ReadOnly Property MenuItemSelected() As System.Drawing.Color
Get
Return Color.FromArgb(alpha, cb)
End Get
End Property

Public Overrides ReadOnly Property MenuItemBorder() As System.Drawing.Color
Get
Return Color.FromArgb(beta, cb)
End Get
End Property

Public Overrides ReadOnly Property MenuItemPressedGradientBegin() As System.Drawing.Color
Get
Return MyBase.MenuItemPressedGradientBegin
End Get
End Property

Public Overrides ReadOnly Property MenuItemPressedGradientEnd() As System.Drawing.Color
Get
Return MyBase.MenuItemPressedGradientEnd
End Get
End Property

Public Overrides ReadOnly Property MenuItemPressedGradientMiddle() As System.Drawing.Color
Get
Return MyBase.MenuStripGradientEnd
End Get
End Property

Public Overrides ReadOnly Property ImageMarginGradientBegin() As System.Drawing.Color
Get

Return Color.FromArgb(&HFE, &HFE, &HFB)

End Get
End Property

Public Overrides ReadOnly Property ImageMarginGradientEnd() As System.Drawing.Color
Get
Return Color.FromArgb(&HBD, &HBD, &HA3)
End Get
End Property

End Class
Public Class MenuColoring

الأن لنربط الكلاس MenuColoring مع كل من MenuStrip و ContextMenuStrip و ToolStrip وStatusMeunuStrip الموجودة داخل الفورم حيث سنفعل ذلك من داخل الحدث Load الخاص بالفورم والكود التالي يوضح ذلك



Private mnuColoring As MenuColoring = New MenuColoring()

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.ContextMenuStrip = ContextMenuStrip1

MenuStrip1.Renderer = New ToolStripProfessionalRenderer(mnuColoring)
ContextMenuStrip1.Renderer = New ToolStripProfessionalRenderer(mnuColoring)
ToolStrip1.Renderer = New ToolStripProfessionalRenderer(mnuColoring)
StatusStrip1.Renderer = New ToolStripProfessionalRenderer(mnuColoring)

End Sub

End Class
Public Class Form1

كما تلاحظون لقد استخدمت بعض الألوان وبأكثر من أسلوب وبشكل عشوائي أيضا لتوضيح الفكرة فقط لا غير وعليك عزيزي القارئ أن تختار الألوان المناسبة لكل صفة بحيث تكون مناسبة مع بعضها البعض ولكي تظهر Menus بشكل احترافي

اعتقد انك تستطيع الأن عزيزي القارئ أن تبني الكلاس كاملا بنفسك لأن الهدف من المقال هو مناقشة أفكارا فقط وليس الهدف هو بناء كل شئ كما قد يتخيل البعض ومن المؤكد انك تستطيع عزيزي القارئ استخدام نفس الفكرة التي ناقشناها في هذا المقال لتطوير الكلاس Skinner الموجود تحت المقال الخاص بتطوير الفورم وهو في اللينك التالي

/index.php?showtopic=188156

بالمرفقات ستجدون نسخة من المثال بنسخة الفيجوال استوديو 2008

بالتوفيق

أخوكم عمر

VBExample1.rar

تم تعديل هذه المشاركة بواسطة a_pess في 13 مارس 2009 في 02:29

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…