تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- أفكار في الجرافكس ....... الجزء الأول
#4
3- تحريك المستطل في الاتجاه الراسي فقط

المثال السابع:

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


كود :
' Vertical Movement
Public Class Form3

Private rect As Rectangle
Private rectWidth As Integer = 22
Private rectHeight As Integer = 22
Private y As Integer = 0
Private MiddleOfRectHeight As Integer = 0
Private maximumVertical As Integer = 0
Private minimumVertical As Integer = 0
Private IsMouseAboveRectangle As Boolean = False
Private IsMouseUnderRectangle As Boolean = False
Private IsMouseInsideRect As Boolean = False

Public Sub New()
InitializeComponent()

Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.SetStyle(ControlStyles.UserPaint, True)

SetGraphicsData()

End Sub

Private Sub SetGraphicsData()
rect = New Rectangle(Me.ClientRectangle.X, Me.ClientRectangle.Y, rectWidth, rectHeight)
MiddleOfRectHeight = rectHeight / 2
maximumVertical = Me.ClientRectangle.Bottom
minimumVertical = Me.ClientRectangle.Y
y = maximumVertical - rectHeight
End Sub

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)

Dim backRectangle As New Rectangle(Me.ClientRectangle.X, Me.ClientRectangle.Y, rect.Width, Me.Height)
Using lgbBack As New Drawing2D.LinearGradientBrush(backRectangle, Color.Orange, Color.Yellow, 180, True)
e.Graphics.FillRectangle(lgbBack, backRectangle)
End Using

Using lgb As New Drawing2D.LinearGradientBrush(rect, Color.FromArgb(255, Color.Cyan), Color.FromArgb(255, Color.DarkBlue), Drawing2D.LinearGradientMode.Horizontal)
e.Graphics.FillRectangle(lgb, rect)
e.Graphics.DrawRectangle(New Pen(Color.DarkBlue, 1.5F), rect)
End Using

End Sub

Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
MyBase.OnMouseDown(e)

If rect.Contains(e.Location) Then
IsMouseInsideRect = True
MiddleOfRectHeight = e.Location.Y - rect.Y
Else
If e.Location.Y < Me.rect.Y Then
IsMouseAboveRectangle = True
Else
IsMouseUnderRectangle = True
End If
End If

Invalidate()
End Sub

Protected Overrides Sub OnMouseUp(ByVal e As MouseEventArgs)
MyBase.OnMouseUp(e)

If IsMouseInsideRect Then
IsMouseInsideRect = False
If e.Location.Y > minimumVertical + MiddleOfRectHeight And _
e.Location.Y < y + MiddleOfRectHeight Then
rect.Y = e.Location.Y - MiddleOfRectHeight
IsMouseInsideRect = False
End If

ElseIf IsMouseAboveRectangle Then
IsMouseAboveRectangle = False

ElseIf IsMouseUnderRectangle Then
IsMouseUnderRectangle = False
End If

Invalidate()
End Sub

Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
MyBase.OnMouseMove(e)
If IsMouseInsideRect Then
If e.Location.Y <= minimumVertical + MiddleOfRectHeight Then
rect.Y = minimumVertical
ElseIf e.Location.Y >= y + MiddleOfRectHeight Then
rect.Y = y
Else
rect.Y = e.Location.Y - MiddleOfRectHeight
End If
Invalidate()
End If
End Sub

Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
MyBase.OnResize(e)
SetGraphicsData()
Invalidate()
End Sub

Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs)
MyBase.OnSizeChanged(e)
SetGraphicsData()
End Sub

End Class

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

وبذلك نكون قد انتهينا من الجزء الأول لهذا المقال

تقبلوا تحياتي
أخوكم عمر
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مقال- أفكار في الجرافكس ....... الجزء الأول - بواسطة Raggi Tech - 05-10-12, 11:22 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! أنس محمود 10 8,388 19-07-22, 12:15 AM
آخر رد: StartLight4000
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,454 30-06-19, 10:41 AM
آخر رد: invocker
  [درس فيديو] مثال بسيط لبرنامج إجازات فقط لأغراض الشرح (الدرس الأول) عبدالله الدوسري 7 12,085 28-04-18, 06:55 PM
آخر رد: moniam
  حساب قيمة معادلة(اقصد صيغة دون مجاهيل) مكتوبة بالتكست : الجزء الخامس والاخير محمد شريقي 4 4,827 23-02-18, 10:44 PM
آخر رد: العواد الصغير
  أفكار في الجرافكس AlignRectangle silverlight 0 1,715 14-10-17, 02:02 PM
آخر رد: silverlight
  مقدمة إلي إخفاء المعلومات - الجزء الأول silverlight 5 4,506 07-01-17, 10:44 PM
آخر رد: Basil Abdallah
  مقدمة إلي إخفاء المعلومات - الجزء الثاني silverlight 1 3,210 06-01-17, 11:52 AM
آخر رد: silverlight
  تحويل الفيديو في برامجك-الجزء الثاني( إصلاح للمشاكل + تعديل للروابط + توضيح للأمر ) RaggiTech 1 3,509 10-12-14, 06:37 PM
آخر رد: abulayth
  الجزء الثاني من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج ( العمليات المتعددة)! أنس محمود 0 3,003 22-02-13, 12:39 AM
آخر رد: أنس محمود
  مقال- كيفية الاستغناء عن الداتا بيز التقليدية في برامجنا – ألجزء الأول RaggiTech 1 3,685 06-10-12, 12:23 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: