(祝)東京オリンピック!

(祝)北京オリンピック!

サンプル集1



   

COPY

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



   

COPY

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



   

COPY

'----------------------------------------------------------------------
'パラメータ
'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



   

COPY

'----------------------------------------------------------------------
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