PDA

نسخه کامل مشاهده نسخه کامل : تعيين مختصات ماوس از داخل usercontrol



ULF_VB6
18-07-2007, 19:06
سلام به همه دوستان عزيز
من مي‌خوام يه ocx بنويسم كه وقتي ماوس روي اون قرار مي‌گيره شكل اون تغيير مي‌كنه و وقتي از محدوده كنترل خارج شد شكلش به حالت اول برگرده.
حالا مشكل اينجاست كه نمي‌دونم چجوري بايد مشخص كنم كه كرسر روي كنترل قرار داره يا نه؟
اگه راهنماييم كنيد ممنون مي‌شم.
البته مطمئنم كه مي‌شه همچين كاري رو انجام داد ولي چجوريش رو نمي‌دونم. چون كنترل‌هايي هستن كه اين‌كار رو انجام مي‌دن.

lucky_0020
20-07-2007, 02:10
در کد مربوط به UserControl کد زیر را وارد کنید و به جای 3شماره شکل مورد نظر خودتون رو بگذاری.
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
UserControl.MousePointer = 3
End Sub
موفق باشید.

ULF_VB6
20-07-2007, 12:05
lucky جان منظورم از شكل اون تغيير مي‌كنه اين بود كه شكل خود اون كنترل تغيير بكنه نه كرسر ماوس.
در واقع مي‌خوام يه جوري تعيين كنم كه آيا ماوس توي هر لحظه روي كنترل من قرار داره يا نه؟
مثل commandbutton ويندوز XP كه وقتي ماوس مي‌ره روش يه خط دورش كشيده مي‌شه.

lucky_0020
20-07-2007, 17:43
ببخشید:31:
البته دوست عزیر ،فرق چندانی هم نداره.از MouseMove استفاده میشه.اما برای تغییر شکل دادن Command می تونید از 2 تا Pictute استفاده کنید و حتی بیشتر.
اما برای تشخیص مکان موس هم از X,Y موجود در MouseMove استفاده کنید.
اگر مشکل حل نشد.ایمیل بدید براتون سورس بفرستم

lucky_0020
20-07-2007, 18:05
دوست عزیز این هم یه مثال خیلی ساده:
یه UserControl بوجود بیارید یک Command به نام Command1 در آن قرار بدید و خاصیت Style آن را روی 1 قرار بدید.و کد زیر را در آن کپی کنید.


Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Command1.BackColor = &H80C0FF
End Sub
Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Command1.BackColor = &H8000000F
End Sub
Private Sub UserControl_Resize()
If (UserControl.Width < 100) Then
UserControl.Width = 100
End If

If (UserControl.Height < 100) Then
UserControl.Height = 100
End If

Command1.Left = 50
Command1.Top = 50
Command1.Width = UserControl.Width - 100
Command1.Height = UserControl.Height - 100
End Sub

lucky_0020
20-07-2007, 18:08
البته برای تشخیص مکان موس غیر از حالتی که من نوشتم می شه از X,Y هم استفاده کرد.که اگه خواستید بگید براتون ایمیل کنم.
در کد بالا که براتون نوشتم اگه موس روی Command بره رنگ Command عوض می شه.

ULF_VB6
21-07-2007, 08:55
سلام، اينايي كه گفتي رو همه رو بلدم.

به نظر شما اگه سايز UserControl با سايز Command يكي باشه بازم اين كدي كه نوشتي بازم جواب مي‌ده ؟!!
معلومه كه جواب نمي‌ده.
به نظر من بايد يه راهي پيدا كرد كه بدون استفاده از mousemove و اينا بشه فهميد كه ماوس كجاي صفحه هست. همين!!!

lucky_0020
21-07-2007, 17:53
دوست عزیز.
اولاً که بالای کدها نوشتم یه مثال ساده.و براتو ن هم نوشتم اگه می خواهید با مختصات کار کنید بگید براتون بفرستم.چون حجم سورس هایی که دارم زیاده.دوماً که این اتفاق هیچ وقت نمی افته.یعنی هیچ وقت این دوتا یه اندازه نمی شن.اگه به کد دقت کنید متوجه می شید چرا.
سوم این که این کد یه ایراد دیگه داره.اون هم اینه که اگه دو تا کنترل کاملاً کنار هم قرار بگیرند این روش دیگه جواب نمی ده.و خودم هم از این روش فقط برای بوجود آوردن یه کنترلهای خاص استفاده می کنم.که این اتفاق توشون هرگز نیافته.در هر صورت در اولین فرصت کد مربوط به مختصات رو براتون می ذارم.چون کل Ocx حجمش زیاده.
موفق باشید.

ULF_VB6
21-07-2007, 19:22
دوست عزیز.
اولاً که بالای کدها نوشتم یه مثال ساده.و براتو ن هم نوشتم اگه می خواهید با مختصات کار کنید بگید براتون بفرستم.چون حجم سورس هایی که دارم زیاده.دوماً که این اتفاق هیچ وقت نمی افته.یعنی هیچ وقت این دوتا یه اندازه نمی شن.اگه به کد دقت کنید متوجه می شید چرا.
سوم این که این کد یه ایراد دیگه داره.اون هم اینه که اگه دو تا کنترل کاملاً کنار هم قرار بگیرند این روش دیگه جواب نمی ده.و خودم هم از این روش فقط برای بوجود آوردن یه کنترلهای خاص استفاده می کنم.که این اتفاق توشون هرگز نیافته.در هر صورت در اولین فرصت کد مربوط به مختصات رو براتون می ذارم.چون کل Ocx حجمش زیاده.
موفق باشید.

منم دو روزه دارم همينو مي‌گم.
اين روش هميشه جواب نمي‌ده. والا خودم بلدم اين كارو بكنم. و usercontrol رو بزرگتر از بقيه object ها بكنم.
من دنبال يه روش اصولي هستم كه هميشه جواب بده. شما وقتي يه كامپوننت مي‌نويسي مي‌دي به بقيه ازش استفاده كنن نمي‌توني بهشون بگي كه اينا رو كنار هم نذاريد!!! پسر خوب
اگه سورسي داري كه هميشه جواب مي‌ده منتظرم. يه جا آپ كن، لينكشو بذار. فعلا.

ULF_VB6
24-07-2007, 11:47
سلام
بالاخره راه حل رو پيدا كردم.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


كلي كتابامو گشتم تا اين تابع GetCursorPos رو پيدا كردم. بعدشم با يه مقدار صرف فسفر اين راه حل به ذهنم رسيد.
اميدوارم به درد بقيه هم بخوره. :11: