• Vô hiệu hóa nút Close của Form (cửa sổ)
  • Vô hiệu hóa nút Close của Form (cửa sổ)

    ChiMai > 07-08-16, 12:04 AM

    Khi em muốn cho 1 form hiện ra nhưng em không muốn cho người ta tắt cửa sổ này bằng nút cửa sổ Close và phải chọn nút mà em tạo ra để đóng form ạ? Em nhờ mọi người viết cho em đoạn code như vậy!?
  • RE: Vô hiệu hóa nút Close của Form (cửa sổ)

    cpucloi > 07-08-16, 01:11 PM

    Của bạn đây này. Nhớ search trước khi hỏi nha.
  • RE: Vô hiệu hóa nút Close của Form (cửa sổ)

    ChiMai > 07-08-16, 02:52 PM

    Anh đã tìm thấy bài này. Nhưng em không hiểu cách sử dụng như thế nào?

    Sub EnabledClose()
        
    Application.CommandBars.ActiveMenuBar.Controls("File").Controls("Close").Enabled False
    End Sub

    Sub DisablesClose
    ()
        
    Application.CommandBars.ActiveMenuBar.Controls("File").Controls("Close").Enabled True
    End Sub 


    Đoạn này em không hiểu: Controls("File").Nó là tên file ạ?
  • RE: Vô hiệu hóa nút Close của Form (cửa sổ)

    maidinhdan > 07-08-16, 04:34 PM

    (07-08-16, 12:04 AM)ChiMai Đã viết: Khi em muốn cho 1 form hiện ra nhưng em không muốn cho người ta tắt cửa sổ này bằng nút cửa sổ Close và phải chọn nút mà em tạo ra để đóng form ạ? Em nhờ mọi người viết cho em đoạn code như vậy!?

    Trả lời:

    Có 3 cách để làm như vậy:

    Riêng câu bạn vừa hỏi:
    (07-08-16, 02:52 PM)ChiMai Đã viết: em không hiểu cách sử dụng như thế nào?
    Mã PHP:
    Sub EnabledClose()
        Application.CommandBars.ActiveMenuBar.Controls("File").Controls("Close").Enabled = False
    End Sub 

    Mã PHP:
    Sub DisablesClose()
        Application.CommandBars.ActiveMenuBar.Controls("File").Controls("Close").Enabled = True
    End Sub  

    Đoạn này em không hiểu: Controls("File").Nó là tên file ạ?
     


    Nó là Menu thực đơn File phía trên cùng của Toolbar, Chấm tiếp theo là nút điều khiển Close thuộc Menu File. ( Chỉ có thê)

    * Quay lại vấn đề Tắt nút X ( Close) trên Form của bạn.

    Cách 1: Vào Properties của Form, đi đến dòng Control Box: bạn chọn chữ No => Tác dụng, là tắt nút X (Close) luôn.
    Cách 2: Nếu không làm theo cách 1, thì chúng ta sẽ tạo 1 câu xác nhận khi nhấn vào nút X Close, cụ thể như sau
    * Chèn vào sự kiện Unload nhé:
    Mã PHP:
    Private Sub Form_Unload(Cancel As Integer
    If 
    MsgBox("Đóng form hả ông nội?"vbYesNo) = vbYes Then 
    Exit Sub 
    Else 
    Cancel True 
    End 
    If 
    End Sub 

    * Tác dụng, khi bạn nhấn nút X close form nó sẽ hỏi " Đóng form hả ông nội?" Bạn chọn Yes nó sẽ đóng, kg thì thôi.

    Cách thứ 3: Hơi rác rối, là tạo ra 1 hàm để không chế đóng form, cụ thể link của cpuloi đã hướng dẫn.
    [Thủ Thuật] Disables or Enabled close button (x) Access

    1/ Bạn tạo một Class Modul, đặt tên là CloseCommand và chép đoạn code này vào

    Mã PHP:
    Option Compare Database
    Option Explicit

    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long_
      ByVal bRevert 
    As Long) As Long

    Private Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As _
      Long
    ByVal wIDEnableItem As LongByVal wEnable As Long) As Long

    Private Declare Function GetMenuItemInfo Lib "user32" Alias _
      
    "GetMenuItemInfoA" (ByVal hMenu As LongByVal un As LongByVal b As _
      Long
    lpMenuItemInfo As MENUITEMINFO) As Long

    Private Type MENUITEMINFO
       cbSize 
    As Long
       fMask 
    As Long
       fType 
    As Long
       fState 
    As Long
       wID 
    As Long
       hSubMenu 
    As Long
       hbmpChecked 
    As Long
       hbmpUnchecked 
    As Long
       dwItemData 
    As Long
       dwTypeData 
    As String
       cch 
    As Long
    End Type

    Const MF_GRAYED = &H1&
    Const 
    MF_BYCOMMAND = &H0&
    Const 
    SC_CLOSE = &HF060&

    Public 
    Property Get Enabled() As Boolean
       Dim hwnd 
    As Long
       Dim hMenu 
    As Long
       Dim Result 
    As Long
       Dim MI 
    As MENUITEMINFO
       
       MI
    .cbSize Len(MI)
       MI.dwTypeData String(800)
       MI.cch Len(MI.dwTypeData)
       MI.fMask MF_GRAYED
       MI
    .wID SC_CLOSE
       hwnd 
    Application.hWndAccessApp
       hMenu 
    GetSystemMenu(hwnd0)
       Result GetMenuItemInfo(hMenuMI.wID0MI)
       Enabled = (MI.fState And MF_GRAYED) = 0
    End Property

    Public Property Let Enabled(boolClose As Boolean)
       Dim hwnd As Long
       Dim wFlags 
    As Long
       Dim hMenu 
    As Long
       Dim Result 
    As Long
       
       hwnd 
    Application.hWndAccessApp
       hMenu 
    GetSystemMenu(hwnd0)
       If Not boolClose Then
           wFlags 
    MF_BYCOMMAND Or MF_GRAYED
       Else
           wFlags 
    MF_BYCOMMAND And Not MF_GRAYED
       End 
    If
       Result EnableMenuItem(hMenuSC_CLOSEwFlags)
    End Property 

    2/ Tạo một modul mới và chép doạn code này vào

    Mã PHP:
    Option Compare Database
    Option Explicit

    Function InitApplication(intEnab As Boolean)
    On Error GoTo err_proc
    'Enabled or disables the MS application close (X) button - Dependant on state of intEnab
    '
    Uses Class Module 'Close Command'
    Const C_PROC_NAME "InitApplication"
      Dim C As CloseCommand
      Set C 
    = New CloseCommand
      C
    .Enabled intEnab
    exit_proc
    :
       Exit Function
    err_proc:
       MsgBox "Error in Function: '" C_PROC_NAME "'" Chr(13) & Err.Description
       Resume exit_proc

    End 
    Function 

    Khi sử dụng gọi InitApplication(False) để Enable ( Nút Close bình thường) và ngược lại

    * Hy vọng 3 cách này bạn tự chọn và làm cho mình 1 cách.

    Thân mến!