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