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