منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مثال عن رسم خط مستقيم بين نقطتين
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

انا اريد ان انشئ خط مستقيم بين نقطتين  في الصفحة  في اي مكان

سنضع قيمة متغير clic  هي 1 اي الضغطة الاولى ..........لما نضغط مرة اخرى ستصبح 2

في clic 1  سنشئ نقطة في الموضوع الاول للضغطة و نسجل الموقع في لبيال 1

PHP كود :
    If clic 1 Then
       
    
 pnt 
= New Label()
 
           Controls.Add(pnt)
 
           pnt.Text "●"
 
           pnt.Font = New Font("Tahoma"10FontStyle.Bold)
 
           pnt.Size = New Size(2020)
 
           Dim x Cursor.Position.Left pnt.Width
            Dim y 
Cursor.Position.Top pnt.Height 31
            pnt
.Location = New Point(xy)
 
           Label1.Text " _ " 


و نضيف 1 لقيمة المتغير  clic

PHP كود :
clic += 

عندها سننشء نقطة اخرى 

PHP كود :
ElseIf clic 2 Then
            pnt2 
= New Label()
 
           Controls.Add(pnt2)
 
           pnt2.Text "●"
 
           pnt2.Font = New Font("Tahoma"10FontStyle.Bold)
 
           pnt2.Size = New Size(2020)
 
           Dim x2 Cursor.Position.Left pnt2.Width
            Dim y2 
Cursor.Position.Top pnt2.Height 31
            Label2
.Text x2 " _ " y2
            pnt2
.Location = New Point(x2y2)
 
           Dim p1 pnt.Location
            Dim p2 
pnt2.Location 


ثم ننشئ خطا مستقينما بينهما
PHP كود :
 g.DrawLine(Pens.Redp1p2

كي نعيد الكرة مرة اخرى اي ننشء خطوط اخرى ما علينا الا ان نرجع القيمة  clic الى 1 
PHP كود :
clic 

من اجل ذلك يجب ان نستدعي دالة الرسم
PHP كود :
Imports System.Drawing.Graphics 

و نعلن عن المتغيرات في البداية 
PHP كود :
 Dim g As Graphics
    Dim clic 
As Integer 1
    Dim pnt
pnt2 As Label 

و في بداية ظهور الصفحة  form1_load
PHP كود :
 g CreateGraphics() 


الشكل النهائي



الكود يحتاج الى تعديل ليكون بشكل دقيق ............. لمن يستطيع نكون شاكرين 

الملف للتعديل

https://top4top.io/downloadf-16791lliz1-rar.html


بالتوفيق
السبب هو انشاءك ليبلات وهي فكرة ليست جيدة 

يمكنك بكل سهولة رسم دائرة بدون الحاجة لانشاء ليبلات عن طريق FillEllipse

السبب الثاني هو استخدامك Cursor في تحديد مكان الضغط وهذا ليس دقيق اطلاقا ، يمكنك استخدام حدث MouseDown للرسم :





كود :
dim p1 as new point(0,0)
dim p2 as new point(0,0)
  Private Sub Form1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Form1.MouseUp

  If clic = 1 Then
g.FillEllipse(Brushes.Red,e.x - 10 , e.y - 10 , 20 ,20)
p1.x = e.x
p1.y = e.y
Label1.Text = e.x & " _ " & e.y
clic += 1

ElseIf clic = 2 Then
g.FillEllipse(Brushes.Red,e.x - 10 , e.y - 10 , 20 ,20)
p2.x = e.x
p2.y = e.y
Label2.Text = e.x & " _ " & e.y
g.DrawLine(Pens.Red, p1, p2)
clic = 1
end if
end sub

لم اقم بتجريبه ولكن ان شاء الله يعمل
كود :
Public Class Form1
   Dim g As Graphics
   Dim clic As Integer = 1
   Dim pnt, pnt2 As Point

   Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
       If e.Button = MouseButtons.Left Then
           If clic = 1 Then
               pnt = New Point(e.X, e.Y)
               clic += 1
               g.FillEllipse(Brushes.Black, New Rectangle(pnt.X - 4, pnt.Y - 4, 7, 7))
               Label1.Text = e.Location.ToString
           ElseIf clic = 2 Then
               pnt2 = New Point(e.X, e.Y)
               g.FillEllipse(Brushes.Black, New Rectangle(pnt2.X - 4, pnt2.Y - 4, 7, 7))
               '==================================================================='
               g.DrawLine(Pens.Red, pnt, pnt2)
               clic = 1
               Label2.Text = e.Location.ToString
           End If
       End If
   End Sub

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
       g = CreateGraphics()
       g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
   End Sub

End Class
جزاكم الله عنا كل خير .
عندي ملاحظة بسيطة الا و هي : لماذا لا نستخدم الحدث دبل كليك لتحديد اول نقطة و الحدث ماوس اب لتحديد ثاني نقطة .
اي دبل كليك و سحب الى النقطة الثانية ثم يتفعل الحدث ماوس اب تلقاءي لرسم النقة الثانية و الوصل بينهما كالبرامج الاحترافية .
و الله الموفق .
السلام عليكم ورحمة الله وبركاته
كم انا سعيد لرؤيتي امثلة الغرافيك في المنتدى حيث ندرتها والقليل من الاخوة من يسير في هذا الاتجاه
بارك الله فيك اخي عبد الهادي على ماقدمته
وبارك الله بكم اخوتي انس محمود - عيد مبارك - عاصم شاهين
ومن باب المشاركة اضع لكم هذا المثال وهو رسم مستقيم بالماوس 
ضغط وسحب ثم افلات
هذه جزئية من مشروعي الذي عملت عليه في فترة سابقة وهو برنامج الرسام 
كنت اتمنى وجود قسم خاص بالغرافيك في المنتدى
الف شكر اخي ابراهيم على هذا المثال .
ما اعجبني في الموضوع انه يمكن ان تغير مكان الخط المرسوم بتغيير مكان اليبل اي اعادة رسمه بعد تغيير اماكن الليبل الموضوعة على البنل .
اخي عاصم برمجة الغرافيك عالم واسع جدا ويلزمه قدر لابأس به من الرياضيات 
ويفضل من له معرفة بالرسم او يعمل في برامج الغرافيك وكل الشركات العاملة في برمجيات الغرافيك لديها عدد من المستخدمين 
يعملون بالغرافيك كمهنة وهي تعطيهم البرمجبات لاختبارها كما انها تستمع لارائهم وتأخذ بنصائحهم وافكارهم ومتطلباتهم التي يرغبون في توفرها في البرنامج

وكما تعلم هذه الشركات تمتلك مبرمجين مخضرمين من ذوي الخبرة العالية 

هههه (نحن نقطة امام بحرهم)

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

(06-08-20, 08:32 PM)عيد مبارك كتب : [ -> ]
كود :
Public Class Form1
   Dim g As Graphics
   Dim clic As Integer = 1
   Dim pnt, pnt2 As Point

   Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
       If e.Button = MouseButtons.Left Then
           If clic = 1 Then
               pnt = New Point(e.X, e.Y)
               clic += 1
               g.FillEllipse(Brushes.Black, New Rectangle(pnt.X - 4, pnt.Y - 4, 7, 7))
               Label1.Text = e.Location.ToString
           ElseIf clic = 2 Then
               pnt2 = New Point(e.X, e.Y)
               g.FillEllipse(Brushes.Black, New Rectangle(pnt2.X - 4, pnt2.Y - 4, 7, 7))
               '==================================================================='
               g.DrawLine(Pens.Red, pnt, pnt2)
               clic = 1
               Label2.Text = e.Location.ToString
           End If
       End If
   End Sub

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
       g = CreateGraphics()
       g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
   End Sub

End Class

روعة ...............دقيق و فعال
شكرا على الاضافة و التعديل

(06-08-20, 08:08 PM)Anas Mahmoud كتب : [ -> ]السبب هو انشاءك ليبلات وهي فكرة ليست جيدة 

يمكنك بكل سهولة رسم دائرة بدون الحاجة لانشاء ليبلات عن طريق FillEllipse

السبب الثاني هو استخدامك Cursor في تحديد مكان الضغط وهذا ليس دقيق اطلاقا ، يمكنك استخدام حدث MouseDown للرسم :





كود :
dim p1 as new point(0,0)
dim p2 as new point(0,0)
  Private Sub Form1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Form1.MouseUp

  If clic = 1 Then
g.FillEllipse(Brushes.Red,e.x - 10 , e.y - 10 , 20 ,20)
p1.x = e.x
p1.y = e.y
Label1.Text = e.x & " _ " & e.y
clic += 1

ElseIf clic = 2 Then
g.FillEllipse(Brushes.Red,e.x - 10 , e.y - 10 , 20 ,20)
p2.x = e.x
p2.y = e.y
Label2.Text = e.x & " _ " & e.y
g.DrawLine(Pens.Red, p1, p2)
clic = 1
end if
end sub

لم اقم بتجريبه ولكن ان شاء الله يعمل

ما شاء الله تم التعديل بفضل فكرتك و تفعيلها من خلال عيد مبارك ........اسمه جميل على فكرة لان كل السنة اعياد ان شاء الله بدون احزان