السلام عليكم و رحمة الله تعالى و بركاته,,,
في هذا الموضوع إن شاء الله سوف نتعلم كيفية صنع أداة لزيادة أزرار تأخذ شكل الأزرار التي تستعمل في تطبيقات نظام ويندوز فيستا. سنستعرض سوية خطوات إنشاء كونترول يمكننا زيادته بكل سهولة على واجهات المستخدم لتطبيقاتنا يأخذ نمط نوع الأزرار الجديد الذي أتى به ويندوز فيستا كما هو مبين على الصورة أذناه.
كبداية, سنحتاج لبعض تعاريف الثوابت التي سنرسل عن طريقها رسائل ويندوز للزر لكي يأخذ شكل CommandLink :
' معرف نمط ويندوز فيستا للزر Private Const BS_COMMANDLINK As Integer = &HE ' رسالة ويندوز لإظهار التعليق على الزر Private Const BCM_SETNOTE As Long = &H1609 ' رسالة ويندوز لإظهار شارة حماية ويندوز فيستا Private Const BCM_SETSHIELD As Long = &H160C
حيث الثابت BS_COMMANDLINK سنستعمله لتعديل نمط إنشاء الزر العادي إلى نمط إنشاء زر COMMANDLINK و ذلك داخل كود الخاصية CreateParams التي سنتكلم عنها لاحقا. الثابت الثاني BCM_SETNOTE عبارة عن رسالة ويندوز نمرر من خلالها نص التعليق الذي سيتم إظهاره تحت نص الزر. الثابت الثالث, عبارة عن رسالة يتم عن طريقها تحديد ما إذا كانت شارة درع حماية ويندوز فيستا ظاهرة أم لا.
بعد تعريف الثوابت سنحتاج طبعا إلى تعريف الدالة التي من خلالها يمكن لنا إرسال رسائل ويندوز إلى الزر. هذه الدالة بطبيعة الحال هي SendMessage. سنعرف الدالة بطريقتين, الأولى لإرسال نص رسالة التعليق :
' دالة إرسال رسائل ويندوز بنمط نص
<DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
Private Shared Function SendMessage(ByVal hWnd As HandleRef, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As String) As IntPtr
End Functionالثانية بالطريقة العادية :
<DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
Private Shared Function SendMessage(ByVal hWnd As HandleRef, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Functionبعد أن انتهينا من تعريف الثوابت المستعملة لإنشاء زر بنمط CommandLink لويندوز فيستا, سنحتاج لتغيير الخاصية FlatStyle إلى FlatStyle.System حتى يتمكن نظام التشغيل من رسم الزر بالنمط الذي نريد. إذا تغير محتوى هذه الخاصية, سيعود الزر إلى حالته العادية كما عهدناه. تحديد الخاصية FlatStyle يتم في الباني الافتراضي للفئة CommandLinkButton :
Public Sub New() ' ضروري لإضهار صيغة ويندوز فيستا على الزر Me.FlatStyle = Windows.Forms.FlatStyle.System End Sub
لتحكم أفضل في الزر على واجهة المستخدم سواء برمجيا أو على IDE, سنقوم بزيادة خاصيتين. الأولى NoteText من نوع String ستمكننا من تحديد أو قراءة نص التعليق الذي يظهر على الزر :
Private _noteText As String
<Description("تحدد أو ترجع نص التعليق على الزر.")> _
Public Property NoteText() As String
Get
Return _noteText
End Get
Set(ByVal value As String)
_noteText = value
SendMessage(New HandleRef(Me, Me.Handle), BCM_SETNOTE, IntPtr.Zero, _noteText)
End Set
End Propertyالخاصية الثانية ShieldIcon من نوع Boolean ستمكننا من إظهار شارة درع حماية ويندوز أم لا. هذه الشارة تستعمل لإعلام المستخدمين أن الوظيفة التي يقوم بها الزر تحتاج لأذونات مدير النظام :
Private _shieldIcon As Boolean
<Description("تحدد أو ترجع إذا ما كانت شارة درع حماية ويندوز فيستا ضاهرا أم لا.")> _
Public Property ShieldIcon() As Boolean
Get
Return _shieldIcon
End Get
Set(ByVal value As Boolean)
_shieldIcon = value
SendMessage(New HandleRef(Me, Me.Handle), BCM_SETSHIELD, IntPtr.Zero, New IntPtr(CInt(_shieldIcon)))
End Set
End Propertyالخاصيتين كلتاهما تستعملان الدالة SendMessage لتحديد نص التعليق و إظهار شارة درع حماية ويندوز أو إخفائها و إظهار مكانها سهم أخضر على الزر.
و أخيرا نحتاج إلى تحديد معرف نمط زر من نوع CommandLink حتى يقوم نظام التشغيل برسم الزر بالطريقة المناسبة. في الخاصية التالية التي قمنا بعمل override لها سنقوم بتحديد نمط CommandLink عن طريق تغيير الخاصية CreateParams.Style و دمج المعرف BS_COMMANDLINK معها عن الطريق المعامل Or :
Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams Get ' تعديل في بارامترز الإنشاء لتفعيل إضهار الزر بصيغة ويندوز فيستا Dim cp As CreateParams = MyBase.CreateParams cp.Style = cp.Style Or BS_COMMANDLINK Return cp End Get End Property
الآن أصبح بمقدور تطبيقاتنا الظهور بنمط واجهات المستخدم التي نراها على التطبيقات المتبثة مع نظام ويندوز فيستا. كل ما يلزمنا هو زيادة فئة إلى مشروع VB.NET ثم زيادة جملة الوراثة من الزر Button تحت معرف الفئة CommandLinkButton. بعد ذلك نلصق الثوابت التي تكلمنا عليها ثم الخصائص فتصبح عندنا فئة أو كونترول لزر من نمط ويندوز فيستا جاهز للعمل و بكل سهولة.
في الملف المرفق, ستجدون مشروعا به الأداة CommandLinkButton و برنامجا صغيرا لإضهار خصائصها و مزاياها.
تحياتي...



