26-07-13, 07:32 PM
السلام عليكم ورحمة الله وبركاته
راح أعطيك مثال يصلح لك كمبتدئ وبأبسط الأساسيات لعمل زر دون الدخول في المسائل المتقدمة
أدرسه بالتفصيل سطر سطر وبعدها بإذن الله ستنطلق من تلقاء نفسك وبالبحث عن المسائل المتقدمة
PHP كود :
Public Class myButton
'' توريث من الزر الأساسي للفجوال بيسيك
Inherits Button
'' متغير لحالة ضغط الماوس على الزر
Private _MouseDown As Boolean = False
'' متغير لحالة دخول الماوس على الزر
Private _MouseHover As Boolean = False
'' متغير لحالة حصول الزر على التركيز
Private _MouseFocused As Boolean = False
'' حدث دخول الماوس
Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs)
'' لازم يكون أول الإجراء ولا شيء قبله والباقي مثله
MyBase.OnMouseEnter(e)
_MouseHover = True
'' تحديث رسم الزر والباقي مثله
Me.Invalidate()
End Sub
'' حدث خروج الماوس
Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs)
MyBase.OnMouseLeave(e)
_MouseHover = False
Me.Invalidate()
End Sub
'' حدث ضغظ زر الماوس
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseDown(e)
If e.Button = Windows.Forms.MouseButtons.Left Then
_MouseDown = True
Me.Invalidate()
End If
End Sub
'' حدث ترك ضغظ زر الماوس
Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseUp(e)
_MouseDown = False
Me.Invalidate()
End Sub
'' حدث حصول الزر على التركيز
Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)
MyBase.OnGotFocus(e)
_MouseFocused = True
Me.Invalidate()
End Sub
'' حدث خسارة الزر للتركيز
Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
MyBase.OnLostFocus(e)
_MouseFocused = False
Me.Invalidate()
End Sub
'' حدث رسم الزر
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'' نأتي لمعرفة حالة ضغط الماوس ودخوله لتحديد لون الرسم
If _MouseDown Then
'' مسح رسم الزر واستبداله بلون
e.Graphics.Clear(Color.Gray)
ElseIf _MouseHover Then
e.Graphics.Clear(Color.DarkGray)
Else
e.Graphics.Clear(Me.BackColor)
End If
'' رسم مستطيل أحمر داخل الزر في حالة حصوله على التركيز
If _MouseFocused Then
e.Graphics.DrawRectangle(Pens.Red, New Rectangle(2, 2, Me.Width - 5, Me.Height - 5))
End If
'' رسم مستطيل على جوانب الزر لتحديده
e.Graphics.DrawRectangle(Pens.Blue, New Rectangle(0, 0, Me.Width - 1, Me.Height - 1))
'' معرفة حجم النص
Dim sz As Size = TextRenderer.MeasureText(Me.Text, Me.Font)
'' تحديد مكان رسم النص بحيث يكون في المنتصف
Dim pt As New Point((Me.Width - sz.Width) / 2, (Me.Height - sz.Height) / 2)
'' رسم النص
e.Graphics.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), pt)
End Sub
End Class
السلام عليكم ورحمة الله وبركاته
