ACCESS 设置窗体居中显示

发布时间 2023-08-04 18:35:23作者: 一曲轻扬
Option Compare Database
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    Private Declare PtrSafe Function MoveWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
    Private Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
#Else
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
#End If

Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1

Function mX() As Integer
    mX = GetSystemMetrics(SM_CXSCREEN)
End Function

Function mY() As Integer
    mY = GetSystemMetrics(SM_CYSCREEN)
End Function

Function SetAccessWindow(ByVal XLeft As Long, ByVal YTop As Long, ByVal XWidth As Long, ByVal YHeight As Long, ByVal frmName As String)
    Dim hwnd As LongPtr
    hwnd = FindWindow(vbNullString, frmName)
    MoveWindow hwnd, XLeft, YTop, XWidth, YHeight, True
End Function

把上面这些代码保存为一个模块

调用时,在窗体的load事件里插入调用即可,比如:

Private Sub Form_Load()   
     Call SetAccessWindow((mX() - 800) / 2, (mY() - 600) / 2, 800, 600, Me.Name)

End Sub
现在已经不再推荐使用call ,你可以使用 MyFunc a,b 这种不带括号传参的形式调用函数,比如上面的 MoveWindow 函数的调用