Option Compare Database
Option Explicit
'------------------------------------------------------------
Private TP As Long
Private X As Long
Private Y As Long
Private cx As Long
Private cy As Long
Private memReportName As String
'------------------------------------------------------------
'
Public Property Let ReportName(ByVal NewName As String)
Dim Ret As Variant
Dim Rpt As Report
Dim OldName As String
On Error Resume Next
OldName = memReportName
If OldName <> NewName Then
'表示しているレポートを閉じる
Then Rpt In Reports
If Rpt.Name = OldName Then
DoCmd.Close acReport, OldName
Exit For
End If
Next Rpt
'新しいレポートを開く
DoCmd.OpenReport NewName, acViewPreview
memReportName = NewName
Ret = MoveWindow(Reports(memReportName).hwnd, X / TP, Y / TP, cx / TP, cy / TP, 1)
'新しいレポートの子ウィンドウを親ウィンドウのフォームに設定
SetParent Reports(memReportName).hwnd, Me.hwnd
End If
End Property
'------------------------------------------------------------
Public Property Get ReportName() As String
ReportName = memReportName
End Property
'------------------------------------------------------------
Private Sub Form_Load()
Dim Ret As Variant
On Error Resume Next
Me.btnDummy.SetFocus
TP = TwipPixel
'フォームに表示するレポートの位置とサイズを調整します
X = 0
Y = Me.フォームヘッダー.Height 'Y = Me.コマンド0.Heightでもよい
cx = Me.InsideWidth
cy = Me.InsideHeight - Me.フォームヘッダー.Height
'Win32API関数を使ってアクセスを最小化します
CloseWindow Application.hWndAccessApp
'フォームの OpenArgs プロパティを使用します
If Len(memReportName) = 0 Then
Exit Sub
Else
memReportName = Me.OpenArgs
End If
'レポートをプレビューします
DoCmd.OpenReport ReportName, acViewPreview
Ret = MoveWindow(Reports(ReportName).hwnd, X / TP, Y / TP, cx / TP, cy / TP, 1)
'レポートの子ウィンドウを親ウィンドウのフォームに設定
SetParent Reports(ReportName).hwnd, Me.hwnd
End Sub
'------------------------------------------------------------
Private Sub Form_Resize()
Dim Ret As Variant
On Error Resume Next
'フォームに表示するレポートの位置とサイズを調整します
X = 0
Y = Me.フォームヘッダー.Height 'Y = Me.コマンド0.Heightでもよい
cx = Me.InsideWidth
cy = Me.InsideHeight - Me.フォームヘッダー.Height
Ret = MoveWindow(Reports(ReportName).hwnd, X / TP, Y / TP, cx / TP, cy / TP, 1)
End Sub
'------------------------------------------------------------
Private Sub コマンド0_Click()
Me.btnDummy.SetFocus
DoCmd.SelectObject acReport, ReportName, False
DoCmd.RunCommand acCmdPrint
End Sub
'------------------------------------------------------------
Private Sub コマンド1_Click()
Me.btnDummy.SetFocus
DoCmd.Close acReport, ReportName
DoCmd.Close acForm, Me.Name
End Sub
'------------------------------------------------------------
Private Sub コマンド2_Click()
Me.btnDummy.SetFocus
ComForeColor "コマンド2"
If コマンド2.ForeColor = vbRed Then
ChangeReport コマンド2.Caption
End If
End Sub
'------------------------------------------------------------
Private Sub コマンド3_Click()
Me.btnDummy.SetFocus
ComForeColor "コマンド3"
If コマンド3.ForeColor = vbRed Then
ChangeReport コマンド3.Caption
End If
End Sub
'------------------------------------------------------------
Private Sub ComForeColor(ByVal strName As String)
Dim Ctrl As Control
Then Ctrl In Me.Controls
If Ctrl.Name = strName Then
Ctrl.ForeColor = vbRed
Else
If Ctrl.ForeColor <> Me.コマンド0.ForeColor Then
Ctrl.ForeColor = Me.コマンド0.ForeColor
End If
End If
Next Ctrl
End Sub
'-------------------------------------------------------------------
Private Sub ChangeReport(ByVal strCap As String)
Dim BUF As String
Select Case strCap
Case "帳票"
BUF = "レポート1"
Case "タックシール"
BUF = "レポート2"
End Select
ReportName = BUF
End Sub
Option Compare Database
Option Explicit
'パラメータ
'hWnd ウィンドウへのハンドル、および間接的に、ウィンドウが属するクラス
'nIndex 取得する値へのゼロベースのオフセット
Public Const GWL_EXSTYLE = -20 '拡張ウィンドウスタイルを取得します
Public Const GWL_STYLE = -16 'ウィンドウスタイルを取得します
Public Const GWL_HWNDPARENT = -8 '親ウィンドウあれば、そのハンドルを取得します
Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
'パラメータ
'hWnd ウィンドウへのハンドル、および間接的に、ウィンドウが属するクラス
'nIndex 取得する値へのゼロベースのオフセット
'dwNewLong 置換値
'GetWindowLongAで得られた値(Val) に対して、最小化ボタンを無効にする場合[dwNewLong = Val And Not WS_MINIMIZEBOX]とする
Public Const WS_OVERLAPPED = &H0 'オーバーラップウィンドウ
Public Const WS_MAXIMIZEBOX = &H10000 '最大化ボタン
Public Const WS_MINIMIZEBOX = &H20000 '最小化ボタン
Public Const WS_SIZEBOX = &H40000 'サイズ変更境界
Public Const WS_THICKFRAME = &H40000 'サイズ変更境界
Public Const WS_SYSMENU = &H80000 'ウィンドウメニュー WS_CAPTIONスタイルも指定する必要があります
Public Const WS_CAPTION = &HC00000 'タイトルバー
Public Const WS_HSCROLL = &H100000 '水平スクロールバー
Public Const WS_VSCROLL = &H200000 '垂直スクロールバー
Public Const WS_BORDER = &H800000 '境界線
Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
'----------------------------------------------------------------------
'パラメータ
'hWndChild 子ウィンドウへのハンドル
'hWndNewParent 新しい親ウィンドウへのハンドル
Public Declare PtrSafe Function SetParent Lib "user32" ( _
ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
'----------------------------------------------------------------------
'パラメータ
'hwnd ウィンドウへのハンドル
'X ウィンドウの左側の新しい位置 (ピクセル単位)
'Y ウィンドウの上部の新しい位置 (ピクセル単位)
'nWidth ウィンドウの新しい幅 (ピクセル単位)
'nHeight ウィンドウの新しい高さ (ピクセル単位)
'bRepaintウィンドウを再描画するかどうかを示します(1:再描画 0:再描画しない)
Public Declare PtrSafe 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
'----------------------------------------------------------------------
'パラメータ
'hWnd ウィンドウへのハンドル
'hWndInsertAfter Zオーダーで配置されたウィンドウの前にあるウィンドウのハンドル このパラメーターは、ウィンドウハンドルまたは次の値のいずれかでなければなりません
Public Const HWND_TOP = &H0 'ウィンドウをZオーダーの一番上に配置します
Public Const HWND_TOPMOST = -1 'ウィンドウを最上位以外のすべてのウィンドウの上に配置します
'X クライアント座標での、ウィンドウの左側の新しい位置 (ピクセル単位)
'Y クライアント座標でのウィンドウ上部の新しい位置 (ピクセル単位)
'cx ウィンドウの新しい幅 (ピクセル単位)
'cy ウィンドウの新しい高さ (ピクセル単位)
'uFlags ウィンドウのサイズ変更および配置フラグ このパラメーターは、以下の値の組み合わせにすることができます
Public Const SWP_NOMOVE = &H2 '現在の位置を保持します( XおよびYパラメーターを無視します)
Public Const SWP_NOSIZE = &H1 '現在のサイズを保持します( cxおよびcyパラメーターを無視します)
Public Const SWP_SHOWWINDOW = &H40 'ウィンドウを表示します
Public Declare PtrSafe Function SetWindowPos Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal hWndInsetAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal uFlags As Long _
) As Long
'----------------------------------------------------------------------
Private Const HORZRES As Long = 8 '画面の幅 (ピクセル単位)
Private Const VERTRES As Long = 10 '画面の高さ (ピクセル単位)
Private Const BITSPIXEL As Long = 12 '各ピクセルの隣接するカラービットの数
Private Const LOGPIXELSX As Long = 88 '画面の幅方向の論理インチあたりのピクセル数
Private Const LOGPIXELSY As Long = 90 '画面の高方向の論理インチあたりのピクセル数
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () As Long
'----------------------------------------------------------------------
Public Function TwipPixel() As Long
Dim DskhWnd As Long
Dim nhDc As Long
Dim Bit As Long
Dim nWidth As Long
Dim nHeight As Long
'デスクトップのハンドル
DskhWnd = GetDesktopWindow
'デスクトップのデバイスコンテキストハンドル
nhDc = GetDC(DskhWnd)
'画面の横幅
nWidth = GetDeviceCaps(nhDc, HORZRES)
'画面の縦幅
nHeight = GetDeviceCaps(nhDc, VERTRES)
'ピクセル当たりのビット数
Bit = GetDeviceCaps(nhDc, BITSPIXEL)
'1インチ=1440Twips
TwipPixel = CLng(1440 / GetDeviceCaps(nhDc, LOGPIXELSX))
End Function