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

أداة : Commandlinkbutton

بدأه محمد رضى في 9 سبتمبر 2009 · 8 رد · 3,147 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

تم تعديل هذه المشاركة بواسطة محمد رضى في 9 سبتمبر 2009 في 16:40

#2

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

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

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

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

وشكرا ,,,,

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#3

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

كـلـمـا زاد عـلـمـك لـلـشـئ الـمـجـهـول ..... كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم

و كـلـمـا زاد جـهـلـك لـلـشـئ الـمـعـلـوم ..... كـلـمـا زاد شـغـفـك لـعـلـم الـمـجـهـول

الــلـــــــهـــــم عـــلـــمـــنــــــي بـــمـــا يـــنــفــعــنــي وانــفــعــنــي بــمــــا عـــلـــمــتــنـــي

#4

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

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

تحياتي...

#5

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

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

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

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

تم تعديل هذه المشاركة بواسطة assaf_abdullah في 10 سبتمبر 2009 في 14:28

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#6
assaf_abdullah كتب:
بس الذي نفسي اعرفه لماذا جميع كنترول مايكروسوفت دوت نت كلاسيكية

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

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

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

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#7

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

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

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

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

سنتعامل هنا مع فضاء الأسماء 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

#8

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

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

post-47088-1252634685_thumb.jpg

VistaButtonSource.zip

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#9

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

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