PDA

View Full Version : مختصات موس



Neo-08
دوشنبه 27 مهر 1388, 20:56 عصر
سلام و خسته نباشيد همگي ، من در اين حد اطلاع دارم كه ميتونم مختصات x و y موس رو روي فرم خودم به دو textbox منتقل كنم . حالا 3تا سوال برام پيش اومده :
1- چجوري ميشه مختصات موس رو روي صفحه اصلي شناخت ؟
2- چجوري ميشه به موس فرمان كليك داد ؟
3- چجوري ميشه با وارد كردن مختصات روي دو دونه textbox موس رو به مختصات مورد نظر انتقال داد؟
---------------------------
خيلي ممنون ميشم اگه جواب بديد آخه تاپيك قبلي من كه يك سوال ديگه پرسيده بودم ، بدون جواب موند :ناراحت: مخلص هم بچه هاي سايت
با تشكر- نئو

Neo-08
چهارشنبه 29 مهر 1388, 19:23 عصر
لطفا بگيد؟:ناراحت: خوب اگه نميشه ، بگيد نميشه حداقل آدم دلش خوش باشه 1 جواب گرفته!

Neo-08
جمعه 01 آبان 1388, 18:06 عصر
حتما بايد اسم تاپيك رو با تورخدا جواب بدين شروع كنم تا شايد نتيجه بگيرم !؟!؟! :ناراحت: من متوجه نميشم تو اين انجمن اين همه ادم متخصص هست يك نفر به يك مبتدي مثل من حاضر نيست كمك كنه ؟ الان اگه ميبينيد اومدم اينجا بازم اين پست رو بيارم جزو پست اول تنها دليلش اينه كه هنوز هر چند ساعت ميام سر ميزنم به اميد اينكه يك نفر جوابمو داده باشه :افسرده:

rooshan2008
شنبه 02 آبان 1388, 00:33 صبح
سلام دوست عزیز
البته جسارت نباشه من متخصص اصلاً نیستم .
شاید با چند تا مثال کوچیک مشکلتون رو بتونم حل کنم .:چشمک:
دستور پایین مکان موس رو بر می گردونه.



Cursor.Position


حالا برای نشون دادن یا برای مطلع شدن مکان موس در هر زمان شما می تونید از یک تایمر یا یک thread استفاده کنید که من برای مثال یک مثال با تایمر برات می زنم.




Dim Tm As New Timer
Public Sub Timer_roshan(ByVal sender As Object, ByVal e As EventArgs)
Dim P = Me.PointToClient(Cursor.Position)
Label1.Text = P.X.ToString + "," + P.Y.ToString
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Tm.Enabled = True

Tm.Interval = 1
AddHandler Tm.Tick, AddressOf Timer_roshan
End Sub




البته CUrsor بدون توجه به کنترل شما مختصات رو بر می گردونه اگه می خواین به وسیله کنترلتون این کارو کنید و ببینید در چه مختصات فرم هستین می تونید از

Dim

P = Me.PointToClient(Cursor.Position)

بجای Me می تونید هر کنترلی که دوست دارید بزارید.

اگه می خواین به وسیله کنترول خاصی به مختصات واقعی موس در صفحه نمایش پی ببرین می تونید از

Dim P = PointtoScreen(Cursor.Position)



برا ایجاد یک کلیک توست برنامه من یک روش بلد بودم البته تو VB.net گمونم روش جدیدتری باید ارائه شده باشه و لی این لینکی که می گم کارت رو راه می اندازه.
http://www.vbforums.com/showthread.php?t=445216
http://www.vbforums.com/showthread.php?t=440871


برای رفتن به مختصات خاص هم :



PublicSub GOTOPoint(ByVal p As Point)
Cursor.Position = p
EndSub


برای فراخونی .

Dim P AsNew Point
P.X = Val(TextBox1.Text)
P.Y = Val(TextBox2.Text)
GOTOPoint(P)

alimanam
شنبه 02 آبان 1388, 00:35 صبح
با سلام

در تکمیل فرمایشات دوست عزیز بالا این نمونه کد رو هم که قسمت آخرش برگرفته از لینکی که معرفی کردن هستش رو هم ببین . موفق باشید . یا علی

Neo-08
یک شنبه 03 آبان 1388, 17:48 عصر
بسيار از توضيحات alimanam و rooshan2008 عزيز ممنونم . :قلب:
2 قسمت اولو كاملا متوجه شدم . بسيار توضيحات تكميل بود دستتون درد نكنه . فقط اگر امكان داره براي كليك توضيحات بيشتري يا كد آماده بزاريد ممنون ميشم . پروژه اي كه جناب alimanam گذاشتند باز نميشه . :ناراحت:

alireza_s_84
یک شنبه 03 آبان 1388, 20:24 عصر
سلام دوست عزیز:


1- چجوري ميشه مختصات موس رو روي صفحه اصلي شناخت ؟



int X = Cursor.Position.X; //مختصات طولی موس نسبت به صفحه اصلی
int Y = Cursor.Position.Y; //مختصات عرضی موس نسبت به صفحه اصلی
int XF = Cursor.Position.X - this.Location.X; //مختصات طولی موس نسبت به فرم جاری
int YF = Cursor.Position.Y - this.Location.Y; //مختصات عرضی موس نسبت به فرم جاری




2- چجوري ميشه به موس فرمان كليك داد ؟

باید از توابع API و ارسال Message استفاده کنید اما اگر جایی که میخواید کلیک کنید همیشه یک کار مشخص انجام میده میتونید یک Button بذارید و برای رویداد کلیکش کد بنویسید بعد Visable اون رو False کنید و هرجا خواستین که موس کلیک بشه این کد رو قرار بدین:


InvokeOnClick(btn***, new EventArgs());



3- چجوري ميشه با وارد كردن مختصات روي دو دونه textbox موس رو به مختصات مورد نظر انتقال داد؟

برای دو دونه Textbox


Int32 MouseX = (Int32)txtX.Text;
Int32 MouseY = (Int32)txtY.Text;
Cursor.Position = new Point(MouseX, MouseY);

برای یه دونه Textbox


String[] strPoint = txtPoPosition.Text.Split(",".ToCharArray());
Int32 MouseX = (Int32)strPoint[0];
Int32 MouseY = (Int32)strPoint[1];
Cursor.Position = new Point(MouseX, MouseY);

کدهای کنترل خطا و شیطنت کاربر بمونه با خودتون
موفق باشید

alimanam
یک شنبه 03 آبان 1388, 22:50 عصر
پروژه اي كه جناب alimanam گذاشتند باز نميشه . :ناراحت:
با سلام

من این نمونه کد رو با VS 2008 نوشتم که احتمالاً نسخه شما 2005 باید باشه ؟ من از این نمونه کد استفاده کردم . موفق باشین . یا علی

http://img229.imageshack.us/img229/4125/wefw242.png


Public Class Form1
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
Me.Text = MousePosition.X & " x " & MousePosition.Y
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Windows.Forms.Cursor.Position = New System.Drawing.Point(TextBox1.Text, TextBox2.Text)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
ListBox1.Items.Add("Hi Guy !")
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
End Sub
End Class