الشبكة العربية لمطوري الألعاب

خبير مشرف مؤيد مارديني مشاركة 1

مرحباً,
باستخدام الكود التالي أقوم برسم مستطيل :
        Dim DrawRectangleGraphics As Graphics
        PictureBox.Image = New Bitmap(PictureBox.Width, PictureBox.Height)
        DrawRectangleGraphics = System.Drawing.Graphics.FromImage (PictureBox.Image)
        DrawRectangleGraphics.Clear(Color.White)
        DrawRectangleGraphics.DrawRectangle (Pens.Black, 50, 50, 20, 10)
        PictureBox.Refresh()


ثم يضغط المستخدم على الـ PictureBox الذي رسمت فيه المستطيل :
و أنا أريد أن أعرف هل ضغط المستخدم على المستطيل أم لا
استخدمت الكود التالي :
    Private Sub PictureBox_MouseDown(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox.MouseDown
        DidYouClickOnTheRectangle(e.X, e.Y, 50, 50, 20, 10)
    End Sub
    Private Sub DidYouClickOnTheRectangle(ByVal X As Integer, _
    ByVal Y As Integer, ByVal SX As Integer, ByVal SY As Integer, _
    ByVal SWidth As Integer, ByVal SHeight As Integer)
        If X >= SX And X <= SX + SWidth And Y >= SY And Y <= SY + SHeight Then
            MsgBox("You Clicked On The Shape☺")
        End If
    End Sub

و الباراميترات المستخدمة :
X, Y إحداثيات الضغط على الـ PictureBox
SX, SY الإحداثيات التي رسم فيها الشكل
SWidth, SHeight بعدين المستطيل

أي اقتراحات
Moayad Mardini

Moayad Mardini,
MSDN Forums Moderator

خبير مشرف مؤيد مارديني مشاركة 2

وجدت طريقة أخرى (و هي التي سأستخدمها في المشروع الذي أنفذه) و هي تتلخص بإنشاء صورة مؤقتة ثم رسم المستطيل باللون الأسود , و التأكد إن كانت النقطة التي لها الإحداثيات (التي ضغط عليها المستخدم) لونها أسود أم لا !
الطريقة بالكود :
Dim TempBitmap As New Bitmap(TheMainPictureBox.Width, TheMainPictureBox.Height)
Dim GraphicsOb As Graphics
GraphicsOb = Graphics.FromImage(TempBitmap)
GraphicsOb.Clear(Color.White)
GraphicsOb.FillRectangle(Brushes.Black,50,50,20,10)
If TempBitmap.GetPixel(e.X, e.Y).ToArgb = -16777216 Then
MessageBox.Show("You Clicked On The Shape !")
End If


Moayad Mardini

Moayad Mardini,
MSDN Forums Moderator

خبير مدير وسام البهنسي مشاركة 3

هذه الطريقة تعطي دقة كاملة في الكشف عن الضغط. بالرغم من ذلك، فإن هذا قد لا يكون المطلوب في الكثير من البرامج (كبرامج الرسوميات مثلاً). بدلاً من ذلك، هي تعتمد وسيلة أبسط وأسرع عن طريق الكشف عن موقع النقطة بالنسبة للمستطيل المحيط بالشكل (سواء كان دائرة أم مربع أو أي شيء آخر). وهذه الطريقة تتيح للمستخدم اختيار الأشكال المفرغة كذلك...

وسام البهنسي
مبرمج في إنفيديا وإنفريمز