نمایش نتایج 1 تا 7 از 7

نام تاپیک: فعال و غیر فعال نمودن موس

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    44

    فعال و غیر فعال نمودن موس

    سلام
    چگونه می توان موس را در برنامه فعال یا غیر فعال نمود؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    تهران
    پست
    182
      

    Declare Function ShowCursor& Lib "user32" (ByVal bShow As Long)



    Show mouse:

    ShowCursor (1)


    hide mouse:

    ShowCursor (0)





  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    44
    با تشکر از شما دوست عزیز
    روش خوب و ساده ای است ولی در این روش فقط موس ظاهر یا مخفی میشود ولی فعال یا غیر فعال نمی شود مثلا فرض کنید اگه در زمان load برنامه موس را مخفی کردیم و بعد از اجرابر روی فرم کلیک کنیم (اگر دارای کد باشد)eventمربوطه اجرا خواهد شددر حالی که من نمی خواهم این عمل انجام شودوواقعا می خواهم موس را فعال یا غیر فعال کنم
    با تشکر

  4. #4
    من تنها کدی که به نظرم میرسه استفاده از دو API هست که یکی همون تابع معرفی شده در بالا هست:

    Private Declare Function ShowCursor& Lib "user32" (ByVal bShow As Long)

    و دیگری تابع زیر میباشد:

    Private Declare Sub ClipCursor Lib "user32" (lpRect As Any)

    همونطور که در بالا گفتید ShowCursor کار نمایش و مخفی کردن موس را انجام میدهد و ClipCursor کار محدود کردن حرکت موس.
    در ClipCursor متغیر lpRect به یک ساختار به نام Rect اشاره میکنه که این ساختار تشکیل شده است از فیلدهای زیر :
    Top : مختصات گوشه بالای چهار گوش
    Bottom : مختصات گوشه پایین چهار گوش
    Left : مختصات گوشه چپ چهار گوش
    Right : مختصات گوشه راست چهار گوش

    در کد زیر نحوه استفاده از ClipCursor را نشان میدهد. این کد باعث میشود که حرکت موس به چهار گوشی در محدوده (200و200) و (150و150) محدود شود.
    ** برای اجرای برنامه زیر دو ‍CommandButton به نام cmdenable و cmddisable قرار دهید که اولین دکمه کار محدود سازی و دیگری عمل برگرداندن به حالت عادی را انجام میدهد.

    Private Type RECT
    left As Long
    top As Long
    right As Long
    bottom As Long
    End Type
    Private Declare Sub ClipCursor Lib "user32" (lpRect As Any)

    Private Sub Cmddisable_Click()
    Dim Rectangle As RECT
    Rectangle.left = 200
    Rectangle.top = 200
    Rectangle.right = 150
    Rectangle.bottom = 150
    ClipCursor Rectangle
    End Sub

    Private Sub CmdEnable_Click()
    ClipCursor ByVal 0&
    End Sub

    حال اگر مختصاتهای داده شده را برابر با صف قرار دهیم یعنی :

    Rectangle.left = 0
    Rectangle.top = 0
    Rectangle.right = 0
    Rectangle.bottom = 0

    نشانگر موس به گوشه بالا و سمت راست صفحه نمایش رفته و محدود به همان نقطه یعنی (0و0) میشود. حالا اگز از تابع ShowCursor& استفاده کنیم میتوانیم موس را در همان محل مخفی کنیم تا دیگر امکان کار کردن موس نباشد.
    ** دقت کنید که برای بازگرداندن موس به حالت عادی باید از کد زیر استفاده کنید :

    ClipCursor ByVal 0&

    پس با این حال مد مربوط به انجام اینکار باید چیزی شبیه به کد زیر باشد:

    Private Type RECT
    left As Long
    top As Long
    right As Long
    bottom As Long
    End Type

    Private Declare Sub ClipCursor Lib "user32" (lpRect As Any)
    Private Declare Function ShowCursor& Lib "user32" (ByVal bShow As Long)

    Private Sub Cmddisable_Click()
    Dim Rectangle As RECT
    ShowCursor (0)
    Rectangle.left = 0
    Rectangle.top = 0
    Rectangle.right = 0
    Rectangle.bottom = 0
    ClipCursor Rectangle
    End Sub

    Private Sub CmdEnable_Click()
    ShowCursor (1)
    ClipCursor ByVal 0&
    End Sub

    راستی کد API دیگری هم برای قفل کردن موس و کیبورد به طور کامل هم وجود دارد که فکر نمیکنم مورد توجه شما باشد (چون با اجرای کد امکان استفاده از کیبورد و موس به طور کامل از بین میرود و به نظر من برنامه ای که نشه در آن نه از کیبورد استفاده کرد و نه از موس دیگه برنامه نیست. مگر آنکه :مخالف: ... .
    این API همان BlockInput هست که در صورتی که نیازی به استفاده از آن دارید حتما بگید تا نحوه عمل آن را نیز به طور کامل تشریح کنم.
    امیدوارم که مورد رضایت واقع شده باشد. :wink: :wink: :lol:

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    44
    ممنونم واقعا خیلی زحمت کشید ید که این همه جواب را کامل و با حوصله در اینجا گذاشتیدمن می خواهم موسم روی
    msflexgrid نرود میدانم که خاصیت top و leftاراداردولی تا آنجا که به خاطر دارم خاصیت buttomوright را ندارد
    با تشکر مجدد

  6. #6
    یک کار جالبتر شما میتونید با نوشتن کد زیر در MSFlexGrid1_MouseMove پیغامی به کاربر نشان دهید و عدم امکان حرکت موس را در آن منطقه نمایش دهید :

    Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    If botton = 0 Then
    MsgBox "You can't move mouse."
    End If
    End Sub

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

    Private Type POINTAPI
    x As Long
    y As Long
    End Type

    Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
    Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

    Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim Point As POINTAPI

    Me.ScaleMode = vbPixels
    Point.x = 0
    Point.y = 0
    ClientToScreen MSFlexGrid1.hwnd, Point
    If botton = 0 Then
    SetCursorPos Point.x, Point.y
    End If
    End Sub

    * این کد دارای دو api دیگر هست که در حال حاضر وقت توضیح دادن تک تک آنها را ندارم. اگر این کد به دردتان خورد و در صورت تمایل بگید تا توصیح بدم. :wink:

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    47
    دوست عزیزم سلام.
    روشی که آقای غیبی گفتن جالب و ساده است. ولی من یه راه ساده تر دارم.
    این ActivX به دردت میخوره. کار کردن باهاش خیلی ساده است. درضمن متاسفانه وقت توضیح دادنشو ندارم. ببخشید :oops:
    اگه سوالی داشتی بپرس. :)

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •