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

نام تاپیک: کلیک راست

  1. #1
    کاربر دائمی آواتار sehm67
    تاریخ عضویت
    اردیبهشت 1388
    محل زندگی
    شاهدژ بالاده
    پست
    266

    کلیک راست

    سلام

    می خوام تو برنامه از کلیک راست بر روی تکست باکس ها جلوگیری کنم.

    Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then MsgBox "کليک راست ممنوع"
    End Sub


    من نمی خوام از کد بالا استفاده کنم می خوام وقتی کاربر روی تکست باکس کلیک راست می کنه گزینه های Paste , Copy , Cute و ... غیر فعال بشن .

    ممنون از دوستان.

  2. #2

    نقل قول: کلیک راست

    سلام
    راههای مختلفی وجود دارد، که مطمئن ترین آنها sub-classing است
    برای اینکار یک ماژول به برنامه اضافه و کدهای زیر را در آن کپی کنید:

    Option Explicit
    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Const GWL_WNDPROC = (-4)
    Private lPProc&
    Public Sub OldWindowProc(tTextBox As TextBox)
    lPProc& = SetWindowLong(tTextBox.hWnd, GWL_WNDPROC, AddressOf NoPopupWindowProc)
    End Sub

    Private Function NoPopupWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Const WM_CONTEXTMENU = &H7B
    Const WM_DESTROY = &H2

    If msg = WM_CONTEXTMENU Then
    Exit Function
    ElseIf msg = WM_DESTROY Then
    SetWindowLong hWnd, GWL_WNDPROC, lPProc&
    Else
    NoPopupWindowProc = CallWindowProc(lPProc&, hWnd, msg, wParam, lParam)
    End If

    End Function



    استفاده:
    Private Sub Form_Load()
    Call OldWindowProc(Text1)
    End Sub


    البته توجه داشته باشین که در استفاده از توابع هوک احتمال بسته شدن ناگهانی وی بی وجود دارد، پس برای جلوگیری از این اتفاق حتما از دستور unload یا فشردن کلید Close برای بستن برنامه استفاده کنید تا دستور یا دکمه End

    موفق باشید
    .: مداحی دلنشین شهیدی که در زادروز ولادتش پرکشید [ تصاویر... ]
    .: مداحی دلنشین شهید غلامعلی رجبی [ تصاویر... ]

    .: لطفا سوالاتی که قابل طرح در انجمن هستند را در خصوصی ارسال نفرمائید.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    35°41′46″N 51°25′23″E
    سن
    28
    پست
    1,545

    نقل قول: کلیک راست

    اگر بخوایم این کارو برای Web Browser بکنیم چی؟

  4. #4

    نقل قول: کلیک راست

    سلام
    کامپوننتی است بنام EventVB.dll حاوی قابلیت های بسیار مفید، از جمله غیرفعال کردن منوی راست کلیک webbrowser
    در انجمن جستجو کنید، قبلا برای یکی از عزیزان قرار دادم

    موفق باشید
    .: مداحی دلنشین شهیدی که در زادروز ولادتش پرکشید [ تصاویر... ]
    .: مداحی دلنشین شهید غلامعلی رجبی [ تصاویر... ]

    .: لطفا سوالاتی که قابل طرح در انجمن هستند را در خصوصی ارسال نفرمائید.

  5. #5
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    فارس
    پست
    1,646

    Question نقل قول: کلیک راست

    نقل قول نوشته شده توسط محسن واژدی مشاهده تاپیک
    سلام
    راههای مختلفی وجود دارد، که مطمئن ترین آنها sub-classing است
    برای اینکار یک ماژول به برنامه اضافه و کدهای زیر را در آن کپی کنید:

    Option Explicit
    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Const GWL_WNDPROC = (-4)
    Private lPProc&
    Public Sub OldWindowProc(tTextBox As TextBox)
    lPProc& = SetWindowLong(tTextBox.hWnd, GWL_WNDPROC, AddressOf NoPopupWindowProc)
    End Sub

    Private Function NoPopupWindowProc(ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Const WM_CONTEXTMENU = &H7B
    Const WM_DESTROY = &H2

    If msg = WM_CONTEXTMENU Then
    Exit Function
    ElseIf msg = WM_DESTROY Then
    SetWindowLong hWnd, GWL_WNDPROC, lPProc&
    Else
    NoPopupWindowProc = CallWindowProc(lPProc&, hWnd, msg, wParam, lParam)
    End If

    End Function



    استفاده:
    Private Sub Form_Load()
    Call OldWindowProc(Text1)
    End Sub


    البته توجه داشته باشین که در استفاده از توابع هوک احتمال بسته شدن ناگهانی وی بی وجود دارد، پس برای جلوگیری از این اتفاق حتما از دستور unload یا فشردن کلید Close برای بستن برنامه استفاده کنید تا دستور یا دکمه End

    موفق باشید
    سلام ب همه.
    من می خوام تابع SetWindowLong رو در VB.Net استفاده کنم اما مشکلی که هست برای ورودی dwNewLong AsLong دستور AddressOf رو پشتیبانی نمی کنه آیا نحوه استفاده از تابع در VB.Net تغییر کرده یا باید از تابع API دیگه ای استفاده بشه؟

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

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