jvPrintDialogEx(印刷ダイアログボックス表示)

印刷時に印刷ダイアログをポップアップさせます。

[構文]
 
Function jvPrintDialogEx(ByVal jid As Long, ByVal prnCode As String, ByVal bufLen As Long, ByVal rval As String) As Long
 
C言語
int jvPrintDialogEx(int jid, char *prnCode, int bufLen, char *rval);
 
Java
int jvPrintDialogEx(int jid, StringBuffer prnCode, int bufLen, StringBuffer rval);
 
Delphi
Function jvPrintDialogEx(jid: Longint; prnCode: PAnsiChar; bufLen: Longint; rval: PAnsiChar): Longint;
   

設定項目

内容

jid

jvCreateで取得したジョブID

prnCode

印刷ダイアログの初期値

bufLen

出力値用バッファ(rval )のバッファ長

rval

出力値用バッファ

 
リターンコード
 

 

内容

 

0以上

出力値バッファサイズ不足(必要サイズが返る)

 

0

正常終了

JV_ERR_JOBID

-3

ジョブIDエラー

JV_ERR_PRINTSET_ALREADY_EXEC

-36

jvSetDevModeまたはjvPrintDialog実行済み

JV_ERR_PRINTDLG_CANCEL

-12

印刷ダイアログでキャンセル  

JV_ERR_CREATEDC

-13

デバイスコンテキスト作成エラー

JV_ERR_MEMORY

-4

メモリ関連エラー

   
[解説]
 
jvPrintDialogExで印刷ダイアログをポップアップさせる場合にはjvCreateの出力先デバイスを「JV_PRINTER」にします。
jvPrintDialogExをコールすると、jvCreateのプリンタデバイスコンテキストは無視されます。
jvPrintDialogExは、jvCreateからjvStartDocまでの間に、1回だけコールすることができます。
jvSetFormでフォームを指定した後にjvPrintDialogExをコールすると、フォームの用紙サイズと用紙方向で初期設定された印刷ダイアログがポップアップします。
1つの印刷ジョブ(jvStartDocからjvEndDocまでの間)の中で用紙サイズや用紙方向の異なる帳票を印刷する場合、jvPrintDialogExは使用できません。そのような帳票で印刷ダイアログを使用する場合には、RDF形式のデータを作成し、プレビューコントロールから印刷を行ってください。プレビューコントロールで印刷ダイアログを表示する場合には、プレビューコントロールのPrintDialogメソッドを使います。
 
印刷ダイアログの初期値
prnCode は、印刷ダイアログの初期値を設定する時に使います。  
以下の項目をカンマ区切りで設定します。
 
1.指定可能な最小ページの値
2.指定可能な最大ページ の値
3.印刷開始ページの初期値
4.印刷終了ページの初期値
5.印刷部数
6.「部単位で印刷」チェックボックスの値(下記設定値参照)
7.「ページ指定」オプションボタンのフラグ(下記設定値参照)
8.プリンタ名
 

定数

内容

JV_COLLATE_ON

1

「部単位で印刷」チェックボックスをチェックする

JV_COLLATE_OFF

0

「部単位で印刷」チェックボックスのチェックをはずす

 

定数

内容

JV_ALLOWSELECT_ON

1

「ページ指定」オプションボタンを使用可能にする

JV_ALLOWSELECT_OFF

0

「ページ指定」オプションボタンを使用不可にする

 
「1.指定可能な最小ページ」と「2.指定可能な最大ページ」の値に0を指定すると全ページ印刷となります。「7.ページ指定オプションボタン」のフラグに0を指定した時も全ページ印刷となります。全ページ印刷では、印刷ダイアログがポップアップした時に、印刷開始ページと印刷終了ページは使用できません。
 
「3.印刷開始ページの初期値」には「1.指定可能な最小ページ」の設定値より小さな値を設定できません。
「4.印刷終了ページの初期値」には「2.指定可能な最大ページ」の設定値より大きな値を設定できません。
 
「6.部単位で印刷チェックボックス」は、印刷部数が1の時には設定できません。
 
「8.プリンタ名」が指定されると、そのプリンタで印刷ダイアログボックスが表示されます。未指定の場合、「通常使うプリンタ」で印刷ダイアログボックスが表示されます。
 
出力用バッファとバッファ長
bufLen と rval は、ユーザーが印刷ダイアログで設定した値を取得する時に使います。
bufLen には rval 用に確保したバッファサイズを設定します。
 
バッファ不足のため設定値を取得できなかった時には、0が返ります。jvPrintDialogExは1回しかコールできないため、バッファサイズ不足でエラーになった場合でも、再度コールすることはできません。余裕を持ったサイズのバッファを確保しておきます。
 
VisualBasic等でコーディングする時は、実行前にspace関数などでバッファを確保しておきます。
 
rval  には、以下の項目がカンマ区切りで返ります。
 
1.プリンタ名称
2.印刷開始ページの値 
3.印刷終了ページの値 
4.印刷部数
5.「部単位で印刷」チェックボックスの状態(下記設定値参照)
 

定数

内容

JV_COLLATE_ON

1

「部単位で印刷」チェックボックスがチェックされている

JV_COLLATE_OFF

0

「部単位で印刷」チェックボックスがチェックされていない

 
ユーザーが開始ページや終了ページを入力した時には、ユーザーが指定したページをすべて印刷するようにプログラミングしてください。ユーザーが全ページ印刷を選択した時には、「2.印刷開始ページの値」と「3.印刷終了ページの値」に 0 が返ります。0 が返った時には、全ページを印刷するようにプログラミングしてください。
 
「4.印刷部数」には、複数部数の印刷をサポートしているプリンタドライバとサポートしていないプリンタドライバで返る値が異なります。プリンタドライバが複数部数の印刷をサポートしている場合には、レポートライブラリは、ユーザーが指定した印刷部数をプリンタドライバに設定し、「4.印刷部数」に 1 を返します。プリンタドライバが複数部数の印刷をサポートしていない場合には、レポートライブラリは、「4.印刷部数」にユーザーが指定した印刷部数を返します。「4.印刷部数」に 2 以上の値が返った時には、プリンタドライバに複数部数印刷の機能がないことを示しているので、ユーザーが指定した回数分の印刷処理をプログラミングし、アプリケーション側で複数部数の印刷に対応してください。
 
「5.部単位で印刷」がチェックされた時には、プリンタドライバが部単位印刷をサポートしていない場合のみ「JV_COLLATE_ON」を返します。チェックされなかった時や、プリンタドライバが部単位印刷をサポートしている時には「JV_COLLATE_OFF」を返します。 「JV_COLLATE_ON」が返った時には、部単位印刷の処理をプログラミングし、アプリケーション側で部単位印刷に対応してください。
 
※部単位印刷をサポートしたプリンタドライバを使う時の注意
部単位印刷に対応したプリンタドライバで部単位印刷を行う時には、事前に、印刷するプリンタのプロパティ設定画面で「全ページ分のデータをスプールしてから印刷データをプリンタに送る」という項目を設定しておきます。この項目が設定されていないと、プリンタドライバが部単位印刷をサポートしていても部単位印刷はできません。
 
基本的なコーディング   
 
[コーディング例]
 
実行時に印刷ダイアログを表示する
 
minPage = 1
maxPage = 3
fromPage = 1
toPage = 3
copies = 2
collate = JV_COLLATE_ON
pageset = JV_PAGESET_ON
    
prnCode = CStr(minPage) & "," & CStr(maxPage) & "," & CStr(fromPage) & "," + CStr(toPage) & "," & CStr(copies) & "," & CStr(collate) & "," & CStr(pageset)
 
rval = Space(100)
 
'プリンタダイアログボックスの表示
ret = jvPrintDialogEx(jid, prnCode, 100, rval)
If ret <> 0 Then
  MsgBox "jvPrintDialogEx Error " + CStr(ret)
End If
 
用紙のサイズや方向の異なるRDFファイルを作成しプレビューコントロールの印刷ダイアログを表示する
 
jid = jvCreate(JV_RDF, form1.hWnd, Printer.hDC, 0,0,0,"C:\tmp\a.rdf")
ret = jvSetForm(jid, "c:\JiveReport\請求書.jfm", 1, "", 100, 0, 0)
'プリンタドライバ情報を設定する
ret = jvSetDevMode(jid, 1, "", "1,9")   'A4縦置きの設定
ret = jvStartDoc(jid, "請求書","")
|
ret = jvDrawForm(jid)  
ret = jvEndPage(jid)
ret = jvSetForm(jid, "c:\JiveReport\受領書.jfm", 1, "", 100, 0, 0)
ret = jvSetDevMode(jid, 1, "", "2,9")   'A4横置きの設定
|
ret = jvDrawForm(jid)
ret = jvEndPage(jid)
ret = jvEndDoc(jid)
ret = jvClose(jid)
 
JiveView.FileName = "C:\tmp\a.rdf"    'RDFファイル名の指定
JiveView.Copies = 1                       '1部印刷する
JiveView.MinPage = 1                     '印刷開始ページを1にする
JiveView.MaxPage = JiveView.PageCount   '印刷終了ページを全ページ数の値にする
JiveView.PrintDialog()