Захват Доступ-Окно приложения Восстановление / Максимизация события - PullRequest
1 голос
/ 26 октября 2010

Сценарий. В проекте Access основная форма должна быть размещена и переставлена ​​в зависимости от размера окна приложения Access.Это должно быть сделано с использованием VBA.

Насколько я знаю, в Microsoft Access VBA нет способа перехватить событие восстановления / максимизации окна приложения доступа (я имею в виду само окно доступа,форма внутри этого).

Есть ли способ решить эту проблему с помощью WIN32 API?

1 Ответ

3 голосов
/ 26 октября 2010

Я не знаю ни одного способа использования WIN32 API для захвата Восстановить / развернуть Событие . Лучший обходной путь, который я могу придумать, - это использовать Win32 API в сочетании с событием Timer формы, которая всегда открыта (главное меню или какая-то скрытая форма), и периодически опрашивать главное окно доступа, чтобы определить, развернуто ли оно в настоящий момент.

Enum WindowSize
    wsMax = 1
    wsMin
    wsRestore
End Enum

'Functions return 1 for true and 0 for false; multiply result by -1 to use as Boolean'
Private Declare Function IsZoomed Lib "User32" (ByVal hWnd As Long) As Integer
Private Declare Function IsIconic Lib "User32" (ByVal hWnd As Long) As Integer

Function IsMaximized(hWnd As Long) As Boolean
    IsMaximized = IsZoomed(hWnd) * -1
End Function

Function IsMinimized(hWnd As Long) As Boolean
    IsMinimized = IsIconic(hWnd) * -1
End Function

Private Sub Form_Timer()
Static PrevWinSize As WindowSize

    If IsMaximized(hWndAccessApp) Then
        If PrevWinSize <> wsMax Then
            'Window has been maximized since we last checked'
            MsgBox "Main Access window is maximized"
            PrevWinSize = wsMax
        End If
    ElseIf IsMinimized(hWndAccessApp) Then
        If PrevWinSize <> wsMin Then
            'Window has been minimized since we last checked'
            MsgBox "Main Access window is minimized"
            PrevWinSize = wsMin
        End If
    Else
        If PrevWinSize <> wsRestore Then
            'Window has been restored since we last checked'
            MsgBox "Main Access window is restored"
            PrevWinSize = wsRestore
        End If
    End If

End Sub

Вам необходимо установить интервал в свойстве формы TimerInterval, чтобы контролировать, как часто вам нужно опрашивать размер окна.

РЕДАКТИРОВАТЬ : Очевидно, вы захотите отслеживать предыдущее состояние главного окна, чтобы не выполнять никакой ненужной обработки. Код в опубликованном виде отражает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...