محمد رضى

أداة : Commandlinkbutton

9 ردود في هذا الموضوع

السلام عليكم و رحمة الله تعالى و بركاته,,,

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

post-207152-1252502786_thumb.jpg

كبداية, سنحتاج لبعض تعاريف الثوابت التي سنرسل عن طريقها رسائل ويندوز للزر لكي يأخذ شكل 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 و برنامجا صغيرا لإضهار خصائصها و مزاياها.

تحياتي...

CmdLinkButton.rar

تم تعديل بواسطه محمد رضى
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ما شاء الله عليك أخي محمد رضى ,,, مواضيعك كلها مميزة ......

ولكن تقريبا هذه العملية لا تعمل بالشكل المطلوب إلا على الفيستا ,, لأني عند التجربة ظهرت الفورم بشكل عادي

وذلك تقريبا شئ طبيعي لأنك مستخدم في الكود

  ' معرف نمط ويندوز فيستا للزر
Private Const BS_COMMANDLINK As Integer = &HE
' رسالة ويندوز لإظهار التعليق على الزر
Private Const BCM_SETNOTE As Long = &H1609
' رسالة ويندوز لإظهار شارة حماية ويندوز فيستا
Private Const BCM_SETSHIELD As Long = &H160C

وشكرا ,,,,

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

,,,, ولكن لو قمت بتحميل ال .NET 3.5 على الويندوز XP ستعمل هذه الاداة ام لا ؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

للأسف يا أخي الكريم, الأداة لن تعمل إلا مع نظام التشغيل ويندوز فيستا و ما بعدها. لقد فكرت في إظهار صندوق إعلام في حالة تم تشغيل الأداة على نظام تشغيل لا يدعمها و لكن الأدوات لا تظهر هكذا رسائل.

شكرا على التفاعل أخي MATRIXDOTNET

تحياتي...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكور اخي محمد رضى و انا اتوقع انه بعد خمس سنوات , سوف نشهد استعمال عملي لها ,

اي عندما ينقرض وندوز XP بمزح , بس الذي نفسي اعرفه لماذا جميع كنترول مايكروسوفت دوت نت كلاسيكية

ليس فيها حركات جمالية مثل حركات

شركت دفكس على سبيل المثال , اهو خشية مطاردتها بتهمة الاحتكار :cash: أم ماذا ؟

تم تعديل بواسطه assaf_abdullah
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
بس الذي نفسي اعرفه لماذا جميع كنترول مايكروسوفت دوت نت كلاسيكية

ليس فيها حركات جمالية مثل حركات

شركت دفكس على سبيل المثال , اهو خشية مطاردتها بتهمة الاحتكار :cash: أم ماذا ؟

أعتقد أن هذا لمصلحة شركات الـThird Party

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكــم ورحمـة الله وبركاتــه ،،

فقط أردت اضافة شئ بالنسبة لزر الدرع

المفروض أنه يكون ظاهر اذا كان الحساب هو لمدير نظام فقط

لذلك نقوم بالتأكد من أن الحساب الحالي هو لمدير نظام

سنتعامل هنا مع فضاء الأسماء Security.Principal

Imports System.Security.Principal

نستعمل الدالة التالية من أجل التأكد من الحساب الحالي هل هو Admin

Private Function IsAdmin() As Boolean
Dim p As New WindowsPrincipal(WindowsIdentity.GetCurrent)
Return p.IsInRole(WindowsBuiltInRole.Administrator)
End Function

هناك مشروع اسمه VISTA BRIDGE به ميزات جميلة

يمكن الاستفادة منه

11242845309.png

01242845309.png

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكــم ورحمـة الله وبركاتــه ،،

هذا مثال وجدته عندى من على CodeProject لكن بلغة السى شارب والتحويل بين اللغتين أمر سهل

post-47088-1252634685_thumb.jpg

VistaButtonSource.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرااااااااااااا الله يعطيك العافيه وسلامه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .