Как я могу найти ширину родительского окна в Доступе MS

Элемент управления "метка" также имеет свойство AssociatedControlId, которое связывает маркировку с другим управлением. Пример того, где это полезно, с управлением текстовым полем. После того как они связаны, программы для чтения с экрана больше могут дать лучшие результаты.

Другим примером является переключатель с маркировкой, позволяет Вам нажимать на маркировку, и переключатель выберет, если свойство AssociatedControlId будет установлено.

MSDN на AssoicatedControlId

5
задан BIBD 17 August 2009 в 20:06
поделиться

4 ответа

Вы можете использовать Windows API:

(ОБНОВЛЕНО, чтобы возвращать твипы)

Type Rect
    x1 As Long
    y1 As Long
    x2 As Long
    y2 As Long
End Type

Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As Rect) As Long

Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Const LOGPIXELSX = 88
Const LOGPIXELSY = 90
Const DIRECTION_VERTICAL = 1
Const DIRECTION_HORIZONTAL = 0

Public Function GetMainWindowSize()

    Dim MDIRect As Rect
    Dim lWidthPixels As Long
    Dim lWidthTwips As Long

    ' Get the screen coordinates and window size of the MDIClient area'
    GetClientRect Application.hWndAccessApp, MDIRect

    lWidthPixels = MDIRect.x2 - MDIRect.x1
    lWidthTwips = PixelsToTwips(lWidthPixels, DIRECTION_HORIZONTAL)

    MsgBox "Width (Pixels) = " & lWidthPixels & "  Width (Twips) = " & lWidthTwips

End Function


Function PixelsToTwips(lPixels As Long, lDirection As Long) As Long

    Dim lDeviceHandle As Long
    Dim lPixelsPerInch As Long

    lDeviceHandle = GetDC(0)

    If lDirection = DIRECTION_HORIZONTAL Then
        lPixelsPerInch = GetDeviceCaps(lDeviceHandle, LOGPIXELSX)
    Else

        lPixelsPerInch = GetDeviceCaps(lDeviceHandle, LOGPIXELSY)
    End If

    lDeviceHandle = ReleaseDC(0, lDeviceHandle)

    PixelsToTwips = lPixels * 1440 / lPixelsPerInch

End Function
7
ответ дан 18 December 2019 в 10:47
поделиться

Вот фактический код, который я использовал

Application.Echo False  'turn off screen updates

DoCmd.Maximize
w = Me.WindowWidth
h = Me.WindowHeight
DoCmd.Restore           'restore the window to it's old size

Application.Echo True   'turn on screen updates

DoCmd.MoveSize w / 2 - myWidth / 2, _
            h / 2 - myHeigth / 2, _
            myWidth, _
            myHeigth
3
ответ дан 18 December 2019 в 10:47
поделиться

Не знаю, какую версию Access вы используете, но в Access 2003, похоже, нет способа напрямую получить эту информацию.

Вот это хак:

DoCmd.Maximize

w = Forms("yourForm").WindowWidth
h = Forms("yourForm").WindowHeight

Это максимизирует текущее окно, предположим, что это ваша форма. Затем вы можете измерить форму, чтобы получить размер области отображения родительского окна, затем отменить развертывание и переместить форму в зависимости от размера родительского окна, который вам теперь известен.

Если есть способ отключить Обновление экрана в Access, вы можете сделать это до развертывания и измерения кода, а затем снова включить его, и это не займет сколько-нибудь заметного времени с точки зрения пользователя.

РЕДАКТИРОВАТЬ: Даже без скрытие команды максимизации от пользователя,

4
ответ дан 18 December 2019 в 10:47
поделиться

Это может быть интересно: http://www.mvps.org/access/downloads/clFormWindow.bas

Он говорит это:

 '' Moves and resizes a window in the coordinate system        *
 '' of its parent window.                                      *
 '' N.B.: This class was developed for use on Access forms     *
 ''       and has not been tested for use with other window    *
 ''       types.                                               *
0
ответ дан 18 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: