投稿時間: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
|