Вопрос
Вопрос — как в MS Access97 сделать недоступной кнопку закрытия приложения (собственно Access-а), чтобы сделать для пользователя закрытие базы данных только специальной кнопкой?
Ответ
В форме делаешь 2 кнопки, вод код для них:
(где Click14 и click15 название кнопки)
Private Sub Click14_Click()
InitApplication_No
' функция скрытия кнопки закрытия окна
Access End Sub
Private Sub click15_Click()
InitApplication_Yes
' функция показа кнопки закрытия окна
Access End Sub
Function InitApplication_No()
On Error GoTo er Dim c As CloseCommand Set
c = New CloseCommand c.Enabled = False
'передача значения модулю класса "CloseCommand"
Exit Function er: MsgBox "Error 0" & Err.Number & " " & Err.Description, vbCritical, "Внимание"
End Function Function
InitApplication_Yes()
On Error GoTo er Dim c As CloseCommand Set
c = New CloseCommand c.Enabled = True
'передача значения модулю класса "CloseCommand"
Exit Function er: MsgBox "Error 0" & Err.Number & " " & Err.Description, vbCritical, "Внимание"
End Function
Потом создаешь не просто МОДУЛЬ (Module), а КЛАСС МОДУЛЬ (Class Module) с названием CloseCommand и вставляешь этот код: (на панели управления есть иконка сохранить «дискетка» перед ней есть иконка «модуль» и маленькая стрелочка, жми на ее и выбери Class Module)
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 Long, ByVal wEnable As Long)
As Long Private Declare Function GetMenuItemInfo Lib "user32"
Alias _ "GetMenuItemInfoA"
(ByVal hMenu As Long, ByVal un As Long, ByVal 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 dwItemDdwItemData
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(80, 0)
MI.cch = Len(MI.dwTypeData)
MI.fMask = MF_GRAYED
MI.wID = SC_CLOSE
hWnd = Application.hWndAccessApp
hMenu = GetSystemMenu(hWnd, 0)
result = GetMenuItemInfo(hMenu, MI.wID, 0, MI)
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(hWnd, 0)
If Not boolClose Then
wFlags = MF_BYCOMMAND Or MF_GRAYED Else
wFlags = MF_BYCOMMAND And Not MF_GRAYED
End
If result = EnableMenuItem(hMenu, SC_CLOSE, wFlags)
End Property
При нажатии в форме на 1 кнопку (которую создали) — X становится не доступным, при нажатии на 2 кнопку — X работает. Не забудь поставить в обоих кнопках в разделе события, в строке нажатие кнопки вот это — [Процедура обработки событий]
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация