投稿日 | : 2004/07/28(Wed) 11:51 |
投稿者 | : ken.1 |
Eメール | : |
URL | : |
タイトル | : Re: CRViewerについて |
こんにちは、確かAPI関数を使用することで実現できたように思います。
以下は、自分が使っているMDBがデータソースの場合のソースです。
と、ここまで書いたところで CRViewer を使ってと書いてありましたね…
どうしても CRViewer を使う必要がない場合の参考にでも;
'クリスタルレポート印刷API(ただし簡易版なので使用に注意すること)
'参照URL:http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/0003/api/
'---------------------------------------------------------------------------------------------------
'APIの使用開始を宣言するAPI (1:正常 以外:エラー)
Declare Function PEOpenEngine Lib "crpe32.dll" () As Integer
'---------------------------------------------------------------------------------------------------
'印刷するrptファイル名を指定する
Declare Function PEOpenPrintJob Lib "crpe32.dll" (ByVal RptName As String) As Integer
'---------------------------------------------------------------------------------------------------
'rptファイルに設定されているテーブル(データ)の位置などを取得する(1:正常 以外:エラー)
'Declare Function PEGetNthTableLocation Lib "CRPE32.DLL" (ByVal PrintJob As Integer, _
ByVal TableN As Integer, _
Location As PETableLocation) As Integer
'---------------------------------------------------------------------------------------------------
'テーブル位置は、PETableLocation構造体の.Locationメンバなので、
'ここにテキストファイルのファイル名を末尾にvbNull(=Chr$(0))を追加して設定する。
'Location.Location = strFileName & vbNull
Declare Function PESetNthTableLocation Lib "crpe32.dll" (ByVal printJob%, _
ByVal TableN%, _
Location As PETableLocation) As Integer
'---------------------------------------------------------------------------------------------------
'印刷元データの指定に使用(詳細は不明)
Private Const PE_TABLE_LOCATION_LEN = 256
Private Const PE_SIZEOF_TABLE_LOCATION = 258 ' # bytes in PETableLocation
Private Type PETableLocation
' initialize to # bytes in PETableLocation
StructSize As Integer
Location As String * PE_TABLE_LOCATION_LEN
End Type
'---------------------------------------------------------------------------------------------------
'印刷先を指定する。(プリンター)
Declare Function PEOutputToPrinter Lib "crpe32.dll" (ByVal printJob As Integer, _
ByVal nCopies As Integer) As Integer
'---------------------------------------------------------------------------------------------------
'プレビュー表示
'プレビュー表示に使用する定数
' ---------------------------
Private Const WS_MINIMIZE = &H20000000 '最小サイズのウィンドウを作る
Private Const WS_VISIBLE = &H10000000 '最初に現れるときに可視のウィンドウを作る(オーバーラップまたはポップアップウィンドウの場合)
Private Const WS_DISABLED = &H8000000 '最初に現れるときに使用不能状態のウィンドウを作る
Private Const WS_CLIPSIBLINGS = &H4000000 '子ウィンドウを互いにクリップする
Private Const WS_CLIPCHILDREN = &H2000000 '親ウィンドウの内部で描画するときに、子ウィンドウが占有する領域を除外する
Private Const WS_MAXIMIZE = &H1000000 '最大サイズのウィンドウを作る
Private Const WS_CAPTION = &HC00000 'タイトルバーを持つウィンドウを作る
Private Const WS_BORDER = &H800000 '境界を持つウィンドウを作る
Private Const WS_DLGFRAME = &H400000 '二重線の境界を持ち、タイトルを持たないウィンドウを作る
Private Const WS_VSCROLL = &H200000 '縦のスクロールバーを持つウィンドウを作る
Private Const WS_HSCROLL = &H100000 '横のスクロールバーを持つウィンドウを作る
Private Const WS_SYSMENU = &H80000 'システムメニューボックスを含む
Private Const WS_THICKFRAME = &H40000 'ウィンドウの大きさを変えることのできる太い境界を含む
Private Const WS_MINIMIZEBOX = &H20000 'アイコン化ボタンを持つ
Private Const WS_MAXIMIZEBOX = &H10000 '最大表示ボタンを持つ
Private Const CW_USEDEFAULT = &H8000 '子ウィンドウに、デフォルトの縦と横の位置およびデフォルトの幅と高さを与える
Private Declare Function PEOutputToWindow Lib "crpe32.dll" (ByVal printJob%, _
ByVal Title$, _
ByVal Lft&, _
ByVal Top&, _
ByVal Wdth&, _
ByVal Height&, _
ByVal style As Long, _
ByVal PWindow As Long) As Integer
'---------------------------------------------------------------------------------------------------
'出力先も決まったら、レポートの出力を開始する。そのためには、PEStartPrintJobを使う。
Declare Function PEStartPrintJob Lib "crpe32.dll" (ByVal printJob As Integer, _
ByVal WaitNoWait As Integer) As Integer
'---------------------------------------------------------------------------------------------------
'後処理であるPECloseEngineを呼び出すためには、事前にPECanCloseEngineで処理が終了しているかを確認する必要がある。
'戻り値が1になったらプリントジョブの処理が終了したことになる
Declare Function PECanCloseEngine Lib "crpe32.dll" () As Integer
'---------------------------------------------------------------------------------------------------
'PEOpenPrintJobに対応する後処理用のAPI
Declare Function PEClosePrintJob Lib "crpe32.dll" (ByVal printJob As Integer) As Integer
'---------------------------------------------------------------------------------------------------
'PEOpenPrintJobとPEClosePrintJobが対になっているのと同じように、
'PEOpenEngineと対になるのがPECloseEngineだ。このAPIを読んで、はじめて一連の処理が終了したことになる。
Declare Sub PECloseEngine Lib "crpe32.dll" ()
'以下関数
'.rptファイルをプレビュー表示する関数
'("フルパスでのRPT名", "フルパスでのMDBソース名", ["ウィンドウタイトル"])
Public Sub goViewCrw(RepName As String, mdbSource As String, Optional Title As String = "プレビュー")
On Error GoTo Err
Dim printJob As Integer
Dim Flg As Integer
Dim Location As PETableLocation
Dim style As Long
Flg = PEOpenEngine
If Flg <> 1 Then
GoTo Err
End If
printJob = PEOpenPrintJob(RepName)
If printJob = 0 Then
GoTo Err
End If
Location.StructSize = PE_SIZEOF_TABLE_LOCATION
Location.Location = mdbSource & Chr$(0)
Flg = PESetNthTableLocation(printJob, 0, Location)
If Flg <> 1 Then
GoTo Err
End If
style = WS_MAXIMIZE Or WS_SYSMENU Or WS_BORDER Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Or WS_THICKFRAME
Flg = PEOutputToWindow(printJob, Title, 100, 100, 100, 100, style, 0)
If Flg <> 1 Then
GoTo Err
End If
Flg = PEStartPrintJob(printJob, True)
If Flg <> 1 Then
GoTo Err
End If
'Flg = PECanCloseEngine
If Flg <> 1 Then
GoTo Err
End If
Flg = PEClosePrintJob(printJob)
If Flg <> 1 Then
GoTo Err
End If
'Call PECloseEngine
Exit Sub
Err:
Call PECloseEngine
MsgBox "プレビュー実行時にエラーが発生しました"
End Sub