Выход из Access только кнопкой из формы

fury21
Дата: 31.10.2009 11:53:43
Всем привет! Можно ли сделать так, что бы из Аксеса можно было выйти только нажатием кнопки с формы, а не крестика в основном окне? Это нужно для ведения логов, либо написать событие на этот крестик?!?!
mirgor
Дата: 31.10.2009 12:02:28
fury21,
1) В конструкторе создай макрос - такой как на рисунке. Сохрани его под именем "macrosQuit".


2) Допустим кнопка у тебя имеет имя btnExit. В свойствах кнопки поставь на событие "Нажатие кнопки" - [Процедура обработки событий]. Нажми рядом на кнопку с "...". Будет создана процедура:

Private Sub btnExit_Click()

End Sub

в ней сделай так:

Private Sub btnExit_Click()
   DoCmd.RunMacro "macrosQuit"
End Sub
шмордень
Дата: 31.10.2009 12:04:42
повесь quit
шмордень
Дата: 31.10.2009 12:07:46
и неибисеббемоск мокросоми
`
Дата: 31.10.2009 12:16:06
fury21
Всем привет! Можно ли сделать так, что бы из Аксеса можно было выйти только нажатием кнопки с формы, а не крестика в основном окне? Это нужно для ведения логов, либо написать событие на этот крестик?!?!


я так понимаю,
сдесь ключевое слово - только

Закрытие Access
mirgor
Дата: 31.10.2009 12:19:49
И самое главное - отключение кнопки закрытия Access.
1) Создаем модуль VBA. В нем пишем следущее:

Это обязательно до всех процедур и функций в начале модуля:
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

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

Далее делаем в этом модуле такую функцию:

Public Function EnabCloseBut(boolClose As Boolean) As Boolean
Dim hWnd As Long
Dim wFlags As Long
Dim hMenu As Long

' получаем hWnd окна Access
hWnd = Application.hWndAccessApp ' Me.hWnd
hMenu = GetSystemMenu(hWnd, 0)
If Not boolClose Then
   ' делаем кнопку серой, недоступной
   wFlags = MF_BYCOMMAND Or MF_GRAYED
Else
   ' возвращаем все как было
   wFlags = MF_BYCOMMAND And Not MF_GRAYED
End If
EnabCloseBut = EnableMenuItem(hMenu, SC_CLOSE, wFlags)
End Function

2) Чтобы запретить кнопку закрытия окна достаточно вызвать созданную функцию с параметром False

Например, можно создать макрос с именем "Autoexec" (именно таким именем, тогда он будет срабатывать при запуске Access) и в нем вписать "Запуск программы":EnabCloseBut(False), т.е. так как на рисунке.
mirgor
Дата: 31.10.2009 12:22:41
шмордень,
Не вопрос, можно и так:
Private Sub lblExit_Click()
   Application.Quit acQuitSaveAll
End Sub
шмордень
Дата: 31.10.2009 12:26:14
mirgor,

осень много букафф
fury21
Дата: 31.10.2009 12:55:08
Мне нужно сделать так, что бы не просто выходить из аксеса, а выходить только по нажатию кнопки. При этом крестик должен быть заблокирован. Либо написать событие при нажатии на крестик!
нутыдал
Дата: 31.10.2009 13:13:07
fury21
крестик должен быть заблокирован
вот mirgor как раз и код для этого написал, и даже рассказал как его вызвать.
migor
И самое главное - отключение кнопки закрытия Access
1) Создаем модуль VBA. В нем пишем следущее:
...
2) Чтобы запретить кнопку закрытия окна достаточно вызвать созданную функцию с параметром False