PDA

View Full Version : رسم یک دایره با استفاده از ماوس



sari-1369
سه شنبه 29 بهمن 1387, 20:48 عصر
چطور میشه با کلیک کردن و حرکت دادن ماوس روی فرم تو همون ناحیه یه دایره رسم کرد ؟؟

shask00l
سه شنبه 29 بهمن 1387, 21:16 عصر
برای رسم دایره به دو پارامتر نیاز دارید . اول مرکز و دوم شعاع . اولی رو که مطمئنا بلدی . در مورد دومی هم روش مناسب اینه که فرمولهای معادله خط استفاده کنی و فاصله مرکز دایره تا نقطه دوم رو حساب کنی که میشه شعاع دایره . اگر حوصله ریراصی و اینارو نداری میتونی فاصله رو به پیکسل حساب کنی . که با یک جمع و تفریق ساده بدست میاد .

sari-1369
سه شنبه 29 بهمن 1387, 22:28 عصر
اینطوری چیزی متوجه نشدم ... میشه یه نمونه کد بدین ؟؟؟

فکر کنم دایره یه خورده فرمول داشته باشه ... اگه با مستطیل هم مثال بزنین ممنون می شم .

در ضمن من می خوام از نیم اسپیس system . Drawing استفاده کنم .

morteza_261
چهارشنبه 30 بهمن 1387, 00:31 صبح
سلام
یه نمونه برای رسم البته با موس نیست ولی امیدوارم مفید واقع بشه.

sari-1369
چهارشنبه 30 بهمن 1387, 01:25 صبح
سلام
یه نمونه برای رسم البته با موس نیست ولی امیدوارم مفید واقع بشه.


ممنون دوست عزیز ..

تو رسمش مشکل نیست .. می خوام با موس اینکارو کنم .

می خوام paint بسازم ... شما ها سورس نرم افزار paint البته به VB.net یا C# ندارین ؟؟

naeeme
چهارشنبه 30 بهمن 1387, 10:25 صبح
این کد پایه هست و یه دایره ترسیم می کنه. نقطه 100و100 گوشه بالا-چپ تصویر را مشخص می کنه.


Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
Dim obj As Graphics = Me.CreateGraphics()
obj.Clear(Me.BackColor)
obj.DrawArc(Pens.Black, 100, 100, e.X, e.Y, 0, 360)
End Sub

sari-1369
چهارشنبه 30 بهمن 1387, 11:54 صبح
این کد پایه هست و یه دایره ترسیم می کنه. نقطه 100و100 گوشه بالا-چپ تصویر را مشخص می کنه.


Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
Dim obj As Graphics = Me.CreateGraphics()
obj.Clear(Me.BackColor)
obj.DrawArc(Pens.Black, 100, 100, e.X, e.Y, 0, 360)
End Sub



ممنون دوست من .

حالا باید با یه حورده تغییر کاری کنم که از نقطه ای که موس کلیک میشه تا جایی که رها میشه یه دایره رسم کنه .

بازم ممنون ، هرجا مشکل داشتم مزاهمتون میشم .

mostafaaa
چهارشنبه 30 بهمن 1387, 19:54 عصر
سلام دوست من
با استفاده از اين كلاس كه براتون نوشتم به راحتي ميتونيد به وسيله موس دايره رسم كنيد :

Public Class DrawEllibseWithMouse
Private _ctrl As Control
Sub New(ByVal ctrl As Control)
_ctrl = ctrl
End Sub
Private X1, Y1 As Integer
Private _CanDraw As Boolean = False
Private Sub MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
X1 = _ctrl.PointToClient(Cursor.Position).X
Y1 = _ctrl.PointToClient(Cursor.Position).Y
End If
End Sub
Private Sub MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
Dim X2, Y2 As Integer
If e.Button = Windows.Forms.MouseButtons.Left Then
X2 = (_ctrl.PointToClient(Cursor.Position).X) - X1
Y2 = (_ctrl.PointToClient(Cursor.Position).Y) - Y1
_ctrl.CreateGraphics.Clear(_ctrl.BackColor)
_ctrl.CreateGraphics.DrawEllipse(Pens.Black, X1, Y1, X2, Y2)
End If
End Sub
Public Property CanDraw() As Boolean
Get
Return _CanDraw
End Get
Set(ByVal value As Boolean)
If value Then
AddHandler _ctrl.MouseDown, AddressOf MouseDown
AddHandler _ctrl.MouseMove, AddressOf MouseMove
Else
RemoveHandler _ctrl.MouseDown, AddressOf MouseDown
RemoveHandler _ctrl.MouseMove, AddressOf MouseMove
End If
_CanDraw = value
End Set
End Property
End Class

براي استفاده ازش هم كافيه يه نمونه از كلاس بگيريد و فرمتون رو بهش معرفي كنيد و خاصيت CanDraw رو True كنيد :

Dim DrwEllibse As New DrawEllibseWithMouse(Me)
DrwEllibse.CanDraw = True
يا علي

sari-1369
چهارشنبه 30 بهمن 1387, 21:32 عصر
سلام دوستان ..

یه مشکلی اینجا هست ...

من میخوام وقتی یه شکل رسم شد روی فرم ، وقتی که می خوام شکل بعدیو رسم کنم . اون قبلیه حذف نشه .

اگرم از کد زیر استفاده نکنم رد پای شکل هایی که تو رویداد mouse move ساخته میشن رو فرم میمونه .

میشه راهنماییم کنین ؟؟




obj.Clear(me.backcolor)

mostafaaa
پنج شنبه 01 اسفند 1387, 09:40 صبح
سلام دوست من

من میخوام وقتی یه شکل رسم شد روی فرم ، وقتی که می خوام شکل بعدیو رسم کنم . اون قبلیه حذف نشه .
اين همون كلاسه كه اصلاحش كردم ، الان هر چندتا كه دايره بخواي باهاش ميتوني رسم كني!!

Public Class DrawEllibseWithMouse
Private Structure ORD
Public X1, X2, Y1, Y2 As Integer
End Structure
Private _ctrl As Control
Sub New(ByVal ctrl As Control)
_ctrl = ctrl
End Sub
Private lstOrd As New List(Of ORD)
Private X1, X2, Y1, Y2 As Integer
Private _CanDraw As Boolean = False
Private Sub MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
X1 = _ctrl.PointToClient(Cursor.Position).X
Y1 = _ctrl.PointToClient(Cursor.Position).Y
End If
End Sub
Private Sub MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
If e.Button = Windows.Forms.MouseButtons.Left Then
X2 = (_ctrl.PointToClient(Cursor.Position).X) - X1
Y2 = (_ctrl.PointToClient(Cursor.Position).Y) - Y1
_ctrl.Refresh()
For Each O As ORD In lstOrd
_ctrl.CreateGraphics.DrawEllipse(Pens.Black, O.X1, O.Y1, O.X2, O.Y2)
Next
_ctrl.CreateGraphics.DrawEllipse(Pens.Black, X1, Y1, X2, Y2)
End If
End Sub
Private Sub MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs)
If e.Button = MouseButtons.Left Then
Dim Temp As ORD
Temp.X1 = X1
Temp.X2 = X2
Temp.Y1 = Y1
Temp.Y2 = Y2
lstOrd.Add(Temp)
End If
End Sub
Public Property CanDraw() As Boolean
Get
Return _CanDraw
End Get
Set(ByVal value As Boolean)
If value Then
AddHandler _ctrl.MouseDown, AddressOf MouseDown
AddHandler _ctrl.MouseMove, AddressOf MouseMove
AddHandler _ctrl.MouseUp, AddressOf MouseUp
Else
RemoveHandler _ctrl.MouseDown, AddressOf MouseDown
RemoveHandler _ctrl.MouseMove, AddressOf MouseMove
RemoveHandler _ctrl.MouseUp, AddressOf MouseUp
End If
_CanDraw = value
End Set
End Property
End Class

يا علي

sari-1369
پنج شنبه 01 اسفند 1387, 10:27 صبح
ممنون مصطفی .

اگه از کلاست سر در اوردم که هیچی :D اگه نه باز مزاحمت می شم .