توی Paint وقتی قلم رو خیلی سریع می کشیم تمام نقاطی که ماوس از روشون عبور کرده رنگی میشن.
ولی اگه بخوایم تو رویداد MouseMove توی VB این کار رو بکنیم با حرکت سریع ماوس بعضی از نقاط در نظر گرفته نمیشن و مسیر ماوس بصورت خط چین رسم میشه.
تابعی هست که تمام نقاط توی مسیر ماوس رو حتی در حرکت های سریع، به برنامه بفهمونه؟
شما مگه تابعتونو چطور مینویسین که یه صورت خط چین می افته؟
تو همون رویداد mose move شما 2 تا متغییر public تعیین میکنین a,bوقتی نقطه شروع رو خونیدین میگذارین تو این 2 تا متغییر بعد تو این رویداد چک میکنین که مقدار x,y اگه با این دو متغییر متفاوت بود یه خط از a,b به x,y کشیده بشه و مختصات x,y در a,b قرار بگیره اینجوری هیچ وقت خط چین نمیشه
من که نمی خوام خط مستقیم بکشم. شما قلم معمولی Paint رو در نظر بگیرید که کاربر هرجا دوست داشت ماوس رو می کشه و صفحه رو خط خطی می کنه. تو VB اگه بخوایم همین کار رو شبیه سازی کنیم به مشکل بر می خوریم چون مواقعی که کاربر ماوس رو سریع می کشه بعضی نقاط در نظر گرفته نمیشن.
کد:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then Me.PSet (X, Y)
End Sub
قطعه کد معادل
کد:
Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = vbLeftButton Then SetPixelV Me.hdc, x, y, vbBlack
End Sub
البته کار دوتا کد یکیه. منظورم این بود که هر دو تا راه رو امتحان کردم.
خب همون که آقا مبین گفتنه.
اینو توی mousemove بنویس.
Me.Line -(X, Y) i
به جواب رسیدم
ظاهرا Paint هم همین مشکل رو داره ولی فاصله بین نقاط رو با خط به هم وصل می کنه. آخه وقتی کدی نوشتم که فاصله بین نقاط رو با خط وصل کنه دیدم شکل حاصله شبیه همون شکل هایی که با قلم توی Paint ایجاد میشن.
پس شد همونی که آقا مبین فرمودند.
ممنون