Доступ — Минимизируйте доступ, но сохраняйте всплывающую форму на экране

#vba #ms-access

Вопрос:

Прежде всего, я хотел бы сказать, что я новичок в доступе, и, пожалуйста, заранее извините меня, если мой вопрос глупый. Тем не менее, я изо всех сил пытаюсь найти способ отделить созданную мной всплывающую форму от доступа. Я добился некоторого прогресса, но я изо всех сил пытаюсь полностью отделить одно от другого. Вот что я сделал до сих пор:

  1. Я изменил настройку «Всплывающее окно» формы на «Да».
  2. Я выбрал форму в качестве «Отображаемой формы» в параметрах «Текущая база данных».
  3. Я нашел функцию, которая минимизировала бы доступ.
 Option Compare Database Option Explicit  Global Const SW_HIDE = 0 Global Const SW_SHOWNORMAL = 1 Global Const SW_SHOWMINIMIZED = 2 Global Const SW_SHOWMAXIMIZED = 3  Private Declare Function apiShowWindow Lib "user32" _ Alias "ShowWindow" (ByVal hwnd As Long, _ ByVal nCmdShow As Long) As Long  Function fSetAccessWindow(nCmdShow As Long)  Dim loX As Long Dim loForm As Form On Error Resume Next Set loForm = Screen.ActiveForm  If Err lt;gt; 0 Then  loX = apiShowWindow(hWndAccessApp, nCmdShow)  Err.Clear End If  If nCmdShow = SW_SHOWMINIMIZED And loForm.Modal = True Then  MsgBox "Cannot minimize Access with " _  amp; (loForm.Caption   " ") _  amp; "form on screen" ElseIf nCmdShow = SW_HIDE And loForm.PopUp lt;gt; True Then  MsgBox "Cannot hide Access with " _  amp; (loForm.Caption   " ") _  amp; "form on screen" Else  loX = apiShowWindow(hWndAccessApp, nCmdShow) End If fSetAccessWindow = (loX lt;gt; 0) End Function  
  1. Я вызываю эту функцию в Form_Load, чтобы открыть только форму и свернуть окно доступа.

Однако я заметил, что если по какой-то причине я открою окно доступа, а затем нажму кнопку «свернуть», оно также свернет форму. Мне было интересно, смогу ли я разделить их, поэтому, когда я сверну окно доступа, форма все равно останется на экране?

Любые отзывы или предложения будут высоко оценены. Заранее благодарю вас!

Комментарии:

1. Я в этом сомневаюсь. Тем не менее, существует метод скрытия фрейма приложения Access, при котором все еще видны формы и отчеты. Общая тема.

2. Форма является дочерней по отношению к родительскому приложению, поэтому сведение к минимуму родительского приложения также сводит к минимуму все дочерние формы. Это сделано специально. Было бы лучше использовать что-то вроде . СЕТЬ для создания автономного приложения, которое использует access в качестве своей внутренней базы данных.

Ответ №1:

Мы можем скрыть экземпляр доступа, сохранив форму видимой. Итак, запишите приведенные ниже коды в стандартный модуль.

 Option Compare Database  Option Explicit  Global Const SW_HIDE = 0 Global Const SW_SHOWNORMAL = 1 Global Const SW_SHOWMINIMIZED = 2 Global Const SW_SHOWMAXIMIZED = 3  Private Declare PtrSafe Function apiShowWindow Lib "user32" _ Alias "ShowWindow" (ByVal hWnd As Long, _ ByVal nCmdShow As Long) As Long  Function fSetAccessWindow(nCmdShow As Long) ' call fSetAccessWindow(0) for hiding access window ' call fSetAccessWindow(1) for showing access window ' call fSetAccessWindow(2) for minimizing access window ' call fSetAccessWindow(3) for maximizing access window   Dim loX As Long  Dim loForm As Form  On Error Resume Next  Set loForm = Screen.ActiveForm   If Err lt;gt; 0 Then  loX = apiShowWindow(hWndAccessApp, nCmdShow)  Err.Clear  End If   If nCmdShow = SW_SHOWMINIMIZED And loForm.Modal = True Then  MsgBox "Cannot minimize Access with " _  amp; (loForm.Caption   " ") _  amp; "form on screen"  ElseIf nCmdShow = SW_HIDE And loForm.PopUp lt;gt; True Then  MsgBox "Cannot hide Access with " _  amp; (loForm.Caption   " ") _  amp; "form on screen"  Else  loX = apiShowWindow(hWndAccessApp, nCmdShow)  End If  fSetAccessWindow = (loX lt;gt; 0) End Function  

Затем вызовите функцию с соответствующим аргументом, чтобы скрыть окно доступа. Нравится-

 Private Sub CmdHideAccess_Click()  Call fSetAccessWindow(0) End Sub  

Внимательно прочитайте комментарии к функциям для получения дополнительных аргументов, если вам нужно.

Комментарии:

1. Прежде всего, спасибо вам за ваш ответ. Однако я не уверен, куда мне следует поместить частную субмарину. Попытался поискать его в Google, но документация по «CmdHideAccess_Click»не была найдена. Я был бы очень признателен, если бы вы дали мне ссылку, чтобы узнать больше об этой функции. Заранее благодарю вас!

2. Сначала (тестовая цель) создайте форму, а затем нажмите командную кнопку. Затем поместите эту строку Call fSetAccessWindow(0) в событие On Click . Если это успешно, то попробуйте поместить код в форму при событии загрузки.

3. О, теперь я понимаю. Это то, что у меня сейчас есть. Однако это сведет к минимуму доступ только при открытии формы. Если пользователь по какой-либо причине развернет окно доступа и щелкнет значок свернуть в окне доступа, это сведет к минимуму как доступ, так и всплывающую форму. Мне было любопытно, можно ли предотвратить сворачивание формы, когда пользователь вручную сворачивает доступ. PS: На данный момент я создал дополнительную кнопку в форме, которая бы минимизировала доступ, но мне не очень нравится это решение. Я рассматриваю это скорее как предзнаменование, чем как реальное решение.