lLng_StdRecSelWidth = 20
lLng_StdScrollBarWidth = 20
llng_StdScrollBarHeight = 20
lSng_TwipsPixel = CSng(15)
lSng_OneHalf = CSng(0.5)
GetWindowRect rFrm_TheForm.hwnd, lRct_WinFrame
GetClientRect rFrm_TheForm.hwnd, lRct_ClientArea
lPnt_TopLeft.tLng_Xloc = lRct_WinFrame.tLng_Left
lPnt_TopLeft.tLng_YLoc = lRct_WinFrame.tLng_Top
lPnt_BottRight.tLng_Xloc = lRct_WinFrame.tLng_Right
lPnt_BottRight.tLng_YLoc = lRct_WinFrame.tLng_Bottom
ScreenToClient rFrm_TheForm.hwnd, lPnt_TopLeft
ScreenToClient rFrm_TheForm.hwnd, lPnt_BottRight
With lRct_WinFrame
.tLng_Left = lPnt_TopLeft.tLng_Xloc
.tLng_Top = lPnt_TopLeft.tLng_YLoc
.tLng_Right = lPnt_BottRight.tLng_Xloc
.tLng_Bottom = lPnt_BottRight.tLng_YLoc
End With
With lRct_ClientArea
.tLng_Left = Abs(lRct_WinFrame.tLng_Left)
.tLng_Top = Abs(lRct_WinFrame.tLng_Top)
.tLng_Right = .tLng_Right + .tLng_Left
.tLng_Bottom = .tLng_Bottom + .tLng_Top
lLng_ClientHandle = CreateRectRgn(.tLng_Left, .tLng_Top, .tLng_Right, .tLng_Bottom)
End With
With lRct_WinFrame
.tLng_Right = .tLng_Right + Abs(.tLng_Left)
.tLng_Bottom = .tLng_Bottom + Abs(.tLng_Top)
.tLng_Top = 0
.tLng_Left = 0
lLng_FrameHandle = CreateRectRgn(.tLng_Left, .tLng_Top, .tLng_Right, .tLng_Bottom)
End With
CombineRgn lLng_FrameHandle, lLng_ClientHandle, lLng_FrameHandle, IIf((rBol_TransOn = True), RGN_XOR, RGN_OR)
DeleteObject lLng_ClientHandle
On Error Resume Next
lLng_DetailTop = Int((CSng(rFrm_TheForm.Section(acHeader).Height) / lSng_TwipsPixel) + lSng_OneHalf)
On Error GoTo 0
lBol_ContinuousForm = (rFrm_TheForm.DefaultView = 1)
lLng_DetailHeight = Int((CSng(rFrm_TheForm.Section(acDetail).Height) / lSng_TwipsPixel) + lSng_OneHalf)
lLng_RecordHeight = lLng_DetailHeight
If (rFrm_TheForm.RecordSource <> vbNullString) Then
If (rFrm_TheForm.Recordset.RecordCount > 0) Then
If (rFrm_TheForm.AllowAdditions = True) Then
lLng_RecordHeight = lLng_DetailHeight * (rFrm_TheForm.Recordset.RecordCount + 1)
Else
lLng_RecordHeight = lLng_DetailHeight * rFrm_TheForm.Recordset.RecordCount
End If
End If
End If
lLng_FooterTop = lLng_DetailTop + lLng_RecordHeight
lLng_RecSecWidth = IIf((rFrm_TheForm.RecordSelectors = True), lLng_StdRecSelWidth, 0)
lLng_VertScrollBarWidth = IIf((rFrm_TheForm.ScrollBars > 1), lLng_StdScrollBarWidth, 0)
lLng_HorzScrollBarHeight = IIf((rFrm_TheForm.ScrollBars = 1 Or rFrm_TheForm.ScrollBars = 3), llng_StdScrollBarHeight, 0)
lLng_ContinuousTop = 9999
lLng_ContinuousLeft = 9999
For Each lCtl_Control In rFrm_TheForm.Controls
If (lCtl_Control.Visible = True) Then
With lRct_ControlArea
Select Case lCtl_Control.Section
Case acHeader
.tLng_Top = 0
Case acDetail
.tLng_Top = lLng_DetailTop
Case acFooter
.tLng_Top = lLng_FooterTop
End Select
.tLng_Left = Int((CSng(lCtl_Control.Left) / lSng_TwipsPixel) + lSng_OneHalf)
.tLng_Top = .tLng_Top + Int((CSng(lCtl_Control.Top) / lSng_TwipsPixel) + lSng_OneHalf)
.tLng_Right = .tLng_Left + Int((CSng(lCtl_Control.Width) / lSng_TwipsPixel) + lSng_OneHalf)
.tLng_Bottom = .tLng_Top + Int((CSng(lCtl_Control.Height) / lSng_TwipsPixel) + lSng_OneHalf)
If ((lCtl_Control.Section = acDetail) And (lBol_ContinuousForm = True)) Then
If (.tLng_Top < lLng_ContinuousTop) Then
lLng_ContinuousTop = .tLng_Top
End If
If (.tLng_Left < lLng_ContinuousLeft) Then
lLng_ContinuousLeft = .tLng_Left
End If
If (.tLng_Right > lLng_ContinuousRight) Then
lLng_ContinuousRight = .tLng_Right
End If
If (.tLng_Bottom > lLng_ContinuousBottom) Then
lLng_ContinuousBottom = .tLng_Bottom
End If
Else
.tLng_Left = lLng_RecSecWidth + .tLng_Left + lRct_ClientArea.tLng_Left
.tLng_Top = .tLng_Top + lRct_ClientArea.tLng_Top
.tLng_Right = lLng_RecSecWidth + .tLng_Right + lRct_ClientArea.tLng_Left
.tLng_Bottom = .tLng_Bottom + lRct_ClientArea.tLng_Top
lLng_CntlHandle = CreateRectRgn(.tLng_Left, .tLng_Top, .tLng_Right, .tLng_Bottom)
CombineRgn lLng_FrameHandle, lLng_FrameHandle, lLng_CntlHandle, RGN_OR
DeleteObject lLng_CntlHandle
End If
End With
End If
Next lCtl_Control
If (lBol_ContinuousForm = True) Then
With lRct_ControlArea
.tLng_Left = lLng_RecSecWidth + lLng_ContinuousLeft + lRct_ClientArea.tLng_Left
.tLng_Top = lLng_ContinuousTop + lRct_ClientArea.tLng_Top
.tLng_Right = lLng_RecSecWidth + lLng_ContinuousRight + lRct_ClientArea.tLng_Left
.tLng_Bottom = lLng_RecordHeight + lLng_ContinuousTop + lRct_ClientArea.tLng_Top
lLng_MaxHeight = Int((CSng(rFrm_TheForm.InsideHeight) / lSng_TwipsPixel) + lSng_OneHalf)
If (.tLng_Bottom > lLng_MaxHeight) Then
.tLng_Bottom = lLng_MaxHeight
End If
lLng_CntlHandle = CreateRectRgn(.tLng_Left, .tLng_Top, .tLng_Right, .tLng_Bottom)
CombineRgn lLng_FrameHandle, lLng_FrameHandle, lLng_CntlHandle, RGN_OR
DeleteObject lLng_CntlHandle
If (lLng_RecSecWidth > 0) Then
.tLng_Left = lLng_ContinuousLeft + lRct_ClientArea.tLng_Left
.tLng_Right = lLng_ContinuousLeft + lLng_RecSecWidth + lRct_ClientArea.tLng_Left
lLng_CntlHandle = CreateRectRgn(.tLng_Left, .tLng_Top, .tLng_Right, .tLng_Bottom)
CombineRgn lLng_FrameHandle, lLng_FrameHandle, lLng_CntlHandle, RGN_OR
DeleteObject lLng_CntlHandle
End If
If (lLng_RecSecWidth > 0) Then
.tLng_Left = lLng_ContinuousLeft + lRct_ClientArea.tLng_Left
.tLng_Right = lLng_ContinuousLeft + lLng_RecSecWidth + lRct_ClientArea.tLng_Left
lLng_CntlHandle = CreateRectRgn(.tLng_Left, .tLng_Top, .tLng_Right, .tLng_Bottom)
CombineRgn lLng_FrameHandle, lLng_FrameHandle, lLng_CntlHandle, RGN_OR
DeleteObject lLng_CntlHandle
End If
If (lLng_VertScrollBarWidth > 0) Then
.tLng_Top = 0
.tLng_Left = lLng_ContinuousRight + lLng_RecSecWidth + lRct_ClientArea.tLng_Left
.tLng_Right = .tLng_Left + lLng_VertScrollBarWidth
.tLng_Bottom = lLng_MaxHeight
lLng_CntlHandle = CreateRectRgn(.tLng_Left, .tLng_Top, .tLng_Right, .tLng_Bottom)
CombineRgn lLng_FrameHandle, lLng_FrameHandle, lLng_CntlHandle, RGN_OR
DeleteObject lLng_CntlHandle
End If
If (lLng_HorzScrollBarHeight > 0) Then
.tLng_Top = lLng_MaxHeight
.tLng_Left = 0
.tLng_Right = lLng_ContinuousRight + lLng_RecSecWidth + lLng_VertScrollBarWidth + lRct_ClientArea.tLng_Left
.tLng_Bottom = .tLng_Top + lLng_HorzScrollBarHeight
lLng_CntlHandle = CreateRectRgn(.tLng_Left, .tLng_Top, .tLng_Right, .tLng_Bottom)
CombineRgn lLng_FrameHandle, lLng_FrameHandle, lLng_CntlHandle, RGN_OR
DeleteObject lLng_CntlHandle
End If
End With
End If
SetWindowRgn rFrm_TheForm.hwnd, lLng_FrameHandle, True
DeleteObject lLng_FrameHandle
End Sub