フォームの位置・サイズ・状態の取得: Access




BackHome BackTips Backメニュー

フォームの位置とサイズはフォームを切り替える場合や起動時などによく使います。

RECT構造体はそれ以外でもよく使います。
状態の取得は、Accessの場合フォームサイズに合わせコントロールを配置するようになる為、
フォーム切り替え時などにユーザーがどのような状態使用していたかを知りたい場合があります。

■ Access VBA 実行コード

Public Const SW_HIDE = 0
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWNORMAL = 1

Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Type POINTAPI
    X As Long
    Y As Long
End Type

Type WINDOWPLACEMENT
    Length As Long
    Flags As Long
    ShowCmd As Long
    PtMinPosition As POINTAPI
    PtMaxPosition As POINTAPI
    RcNormalPosition As RECT
End Type

Public Const WPF_RESTORETOMAXIMIZED = &H2
Public Const WPF_SETMINPOSITION = &H1

Declare Function GetWindowPlacement Lib "user32" (ByVal hWnd As Long, lpwndpl As WINDOWPLACEMENT) As Long

Private Sub コマンド0_Click()
    Dim lRet As Long
    Dim lpWnd As WINDOWPLACEMENT

    With lpWnd
        .Length = LenB(lpWnd)
        lRet = GetWindowPlacement(Me.hWnd, lpWnd)

        Me!テキスト1 = "フォームの表示状態:"
        If lRet <> 0 Then
            If .ShowCmd = SW_SHOWMINIMIZED Then
                Me!テキスト1 = Me!テキスト1 & "最小化サイズ" & vbCrLf
            ElseIf .ShowCmd = SW_SHOWMAXIMIZED Then
                Me!テキスト1 = Me!テキスト1 & "最大化サイズ" & vbCrLf
            ElseIf .ShowCmd = SW_SHOWNORMAL Then
                Me!テキスト1 = Me!テキスト1 & "通常サイズ" & vbCrLf
            ElseIf .ShowCmd = SW_HIDE Then
                Me!テキスト1 = Me!テキスト1 & "非表示" & vbCrLf
            Else
                Me!テキスト1 = Me!テキスト1 & "不明" & vbCrLf
            End If
            Me!テキスト1 = Me!テキスト1 & _
                "通常サイズ時の座標(L,T)-(W,H):" _
                & "(" & .RcNormalPosition.Left & "," & .RcNormalPosition.Top & ")" _
                & "-(" & .RcNormalPosition.Right & "," & .RcNormalPosition.Bottom & ")" & vbCrLf
            Me!テキスト1 = Me!テキスト1 & _
                "最大化サイズ時の座標(L,T):" _
                & "(" & .PtMaxPosition.X & "," & .PtMaxPosition.Y & ")" & vbCrLf
            Me!テキスト1 = Me!テキスト1 & _
                "最小化サイズ時の座標(L,T):" _
                & "(" & .PtMinPosition.X & "," & .PtMinPosition.Y & ")" & vbCrLf
        Else
            Me!テキスト1 = Me!テキスト1 & "取得エラー" & vbCrLf
        End If
    End With

End Sub

BackHome BackTips Backメニュー

Copyright(C) FeedSoft