PDA

View Full Version : سوال: سؤال در مورد MouseMove



Hassan2500
چهارشنبه 27 اردیبهشت 1391, 09:23 صبح
سلام

من میخوام وقتی موس روی لیبل1 رفت کد زیر اجرا بشه و اگه کنار رفت یعنی چه از فرم خارج بشه یا روی هر چیز دیگه ای بره دیگه اجرا نشه مثلاً تکستهای فرم یا مثلاً خارج بشه از فرم من میخوام یه کد واسه همه باشه تا از تکرار MouseMove برای هر چیزی جلوگیری بشه کدش چی میشه

Label1.ForeColor = &H80000002
Label1.FontUnderline = True

arenaw
چهارشنبه 27 اردیبهشت 1391, 11:12 صبح
سلام
این کد رو امتحان کن احتمالا جواب میده، ولی مشکلی که داره اینه که نباید لیبیلت گوشه فرم باشه که ماوس بتونه مستقیما از روی لیبیل بدون اینکه روی فرم بره خارج بشه.

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Label1.ForeColor <> &H80000012 Then
Label1.ForeColor = &H80000012
Label1.FontUnderline = False
End If
End Sub

Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Label1.ForeColor <> &H80000002 Then
Label1.ForeColor = &H80000002
Label1.FontUnderline = True
End If
End Sub

Hassan2500
چهارشنبه 27 اردیبهشت 1391, 11:28 صبح
منم مشکلم اینه میگم اگه نشانگر موس هر جا رفت چه خارج از فرم چه جایی دیگه کد اجرا بشه نه فقط روی فرم من کد اینو میخوام وگرنه این کد رو بلدم

just4froum
چهارشنبه 27 اردیبهشت 1391, 13:35 عصر
این که میگید وقتی موس روی لیبل1 رفت کد زیر اجرا بشه ماله وقتی که فرم فکوس داشته باشه یا نه حتی اگر هم نداشته باشه کد اجرا بشه ؟

just4froum
چهارشنبه 27 اردیبهشت 1391, 13:58 عصر
این یه مدلشه که البته فقط برای فرم های none جواب میده برای بقیه فرم ها یکم تغییر می خواد.

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
X As Long
Y As Long
End Type

Private Sub Timer1_Timer()
Dim MousePos As POINTAPI

GetCursorPos MousePos


If MousePos.X >= ((Label1.Left / 15) + (Me.Left / 15)) And MousePos.X <= ((Label1.Left / 15) + (Me.Left / 15) + (Label1.Width / 15)) Then
If MousePos.Y >= ((Label1.Top / 15) + (Me.Top / 15)) And MousePos.Y <= ((Label1.Top / 15) + (Me.Top / 15) + (Label1.Height / 15)) Then
Label1.BackColor = vbYellow
Else
Label1.BackColor = vbRed
End If
Else
Label1.BackColor = vbRed
End If

End Sub

Hassan2500
چهارشنبه 27 اردیبهشت 1391, 21:25 عصر
از دوستان کی میتونه کد بالا رو بر اساس نوع سؤالی که در پست1 که کردم تنظیم کنه احتیاج بهش دارم

just4froum
چهارشنبه 27 اردیبهشت 1391, 21:56 عصر
از دوستان کی میتونه کد بالا رو بر اساس نوع سؤالی که در پست1 که کردم تنظیم کنه احتیاج بهش دارم

خوب کد بالا مگه چه فرقی داره ؟

Hassan2500
چهارشنبه 27 اردیبهشت 1391, 22:00 عصر
در واقع مثلاً یکیش وقتی نشانگر موس بالای لیبل میره کد عمل میکند من میخوام روی خود لیبل میره عمل کنه راستش من برنامه نویسیم ضعیفه اگه میشه اصلاحش کنید و من از فرم معمولی استفاده میکنم

just4froum
چهارشنبه 27 اردیبهشت 1391, 23:10 عصر
در واقع مثلاً یکیش وقتی نشانگر موس بالای لیبل میره کد عمل میکند من میخوام روی خود لیبل میره عمل کنه راستش من برنامه نویسیم ضعیفه اگه میشه اصلاحش کنید و من از فرم معمولی استفاده میکنم

گفتم که این برای فرم های none کاربرد داره.

تونستم چشم.

just4froum
پنج شنبه 28 اردیبهشت 1391, 10:04 صبح
بفرمایید این هم کد جدید.

یک label یک timer و یک picturebox بگذار رو فرمت.

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Private Type POINTAPI
X As Long
Y As Long
End Type

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Dim ControlBoxBorder As Long
Dim FormBorderStyle As Long

Private Sub Timer1_Timer()
Dim MousePos As POINTAPI

GetCursorPos MousePos


If MousePos.X >= ((Label1.Left / 15) + (Me.Left / 15)) + FormBorderStyle And MousePos.X <= ((Label1.Left / 15) + (Me.Left / 15) + (Label1.Width / 15)) + FormBorderStyle Then
If MousePos.Y >= ((Label1.Top / 15) + (Me.Top / 15)) + ControlBoxBorder And MousePos.Y <= ((Label1.Top / 15) + (Me.Top / 15) + (Label1.Height / 15)) + ControlBoxBorder Then
Label1.BackColor = vbYellow
Else
Label1.BackColor = vbRed
End If
Else
Label1.BackColor = vbRed
End If

End Sub


Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 1
Picture1.Top = 0
Picture1.Left = 0
Picture1.Visible = False
Dim PicPos As RECT
GetWindowRect Picture1.hwnd, PicPos
ControlBoxBorder = PicPos.Top - (Me.Top / 15)
FormBorderStyle = PicPos.Left - (Me.Left / 15)
End Sub

محسن واژدی
پنج شنبه 28 اردیبهشت 1391, 14:16 عصر
سلام علیکم

ضمیمه زیر را هم بررسی کنید

برای استفاده کافی است user-control همراه سورس را به برنامه اضافه کنید و برچسب یا هر شی دیگری را با کد زیر به کنترل ضمیمه کنید، به عنوان مثال برای Label1 کد زیر را در رویداد Form_Load قرار میدهیم:
Private Sub Form_Load()
MouseMove1.TargetObject Label1
End Sub

همینطور در کنترل دو رویداد MouseIn و MouseOut هم وجود دارد که در صورت لزوم میتوانید دستوراتی را در آن برای اجرا شدن آنها در زمان قرارگیری موس و یا خارج شدن موس از روی شی تعریف کنید

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


موفق باشید