انا اريد ان انشئ خط مستقيم بين نقطتين في الصفحة في اي مكان
سنضع قيمة متغير clic هي 1 اي الضغطة الاولى ..........لما نضغط مرة اخرى ستصبح 2
في clic 1 سنشئ نقطة في الموضوع الاول للضغطة و نسجل الموقع في لبيال 1
PHP كود :
If clic = 1 Then
pnt = New Label() Controls.Add(pnt) pnt.Text = "●" pnt.Font = New Font("Tahoma", 10, FontStyle.Bold) pnt.Size = New Size(20, 20) Dim x = Cursor.Position.X - Left - pnt.Width Dim y = Cursor.Position.Y - Top - pnt.Height - 31 pnt.Location = New Point(x, y) Label1.Text = x & " _ " & y
و نضيف 1 لقيمة المتغير clic
PHP كود :
clic += 1
عندها سننشء نقطة اخرى
PHP كود :
ElseIf clic = 2 Then pnt2 = New Label() Controls.Add(pnt2) pnt2.Text = "●" pnt2.Font = New Font("Tahoma", 10, FontStyle.Bold) pnt2.Size = New Size(20, 20) Dim x2 = Cursor.Position.X - Left - pnt2.Width Dim y2 = Cursor.Position.Y - Top - pnt2.Height - 31 Label2.Text = x2 & " _ " & y2 pnt2.Location = New Point(x2, y2) Dim p1 = pnt.Location Dim p2 = pnt2.Location
ثم ننشئ خطا مستقينما بينهما
PHP كود :
g.DrawLine(Pens.Red, p1, p2)
كي نعيد الكرة مرة اخرى اي ننشء خطوط اخرى ما علينا الا ان نرجع القيمة clic الى 1
PHP كود :
clic = 1
من اجل ذلك يجب ان نستدعي دالة الرسم
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()
الشكل النهائي
الكود يحتاج الى تعديل ليكون بشكل دقيق ............. لمن يستطيع نكون شاكرين
06-08-20, 08:08 PM (آخر تعديل لهذه المشاركة : 06-08-20, 08:09 PM {2} بواسطة 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
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
جزاكم الله عنا كل خير .
عندي ملاحظة بسيطة الا و هي : لماذا لا نستخدم الحدث دبل كليك لتحديد اول نقطة و الحدث ماوس اب لتحديد ثاني نقطة .
اي دبل كليك و سحب الى النقطة الثانية ثم يتفعل الحدث ماوس اب تلقاءي لرسم النقة الثانية و الوصل بينهما كالبرامج الاحترافية .
و الله الموفق .
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
السلام عليكم ورحمة الله وبركاته
كم انا سعيد لرؤيتي امثلة الغرافيك في المنتدى حيث ندرتها والقليل من الاخوة من يسير في هذا الاتجاه
بارك الله فيك اخي عبد الهادي على ماقدمته
وبارك الله بكم اخوتي انس محمود - عيد مبارك - عاصم شاهين
ومن باب المشاركة اضع لكم هذا المثال وهو رسم مستقيم بالماوس
ضغط وسحب ثم افلات
هذه جزئية من مشروعي الذي عملت عليه في فترة سابقة وهو برنامج الرسام
كنت اتمنى وجود قسم خاص بالغرافيك في المنتدى
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
الف شكر اخي ابراهيم على هذا المثال .
ما اعجبني في الموضوع انه يمكن ان تغير مكان الخط المرسوم بتغيير مكان اليبل اي اعادة رسمه بعد تغيير اماكن الليبل الموضوعة على البنل .
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
اخي عاصم برمجة الغرافيك عالم واسع جدا ويلزمه قدر لابأس به من الرياضيات ويفضل من له معرفة بالرسم او يعمل في برامج الغرافيك وكل الشركات العاملة في برمجيات الغرافيك لديها عدد من المستخدمين يعملون بالغرافيك كمهنة وهي تعطيهم البرمجبات لاختبارها كما انها تستمع لارائهم وتأخذ بنصائحهم وافكارهم ومتطلباتهم التي يرغبون في توفرها في البرنامج
وكما تعلم هذه الشركات تمتلك مبرمجين مخضرمين من ذوي الخبرة العالية
هههه (نحن نقطة امام بحرهم)
شكرا لك ياغالي اسعدني تفاعلك
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
07-08-20, 04:52 AM (آخر تعديل لهذه المشاركة : 07-08-20, 04:59 AM {2} بواسطة عبد الهادي بهاب.)
و الله سعادة كبيرة ان اجد هذا الكم الهائل من التجاوب بالاضافة
--------- ليس كبعض مشاركات مشكووووووووووووووووووووووور او شكررررررررررا -------
متابع معكم و ساستعمل كل الاقتراحات
بارك الله فيكم
--------------
طبعا يمكن استعمال الفكرة في تمارين الربط بين اجابتين مثلا او في تمارين الرياضيات ......الخ
و من خلال رددوكم -- اوحي الي --- او الهمت الكثير من المشاريع ساجد لها طريقا في القريب العاجل
(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