この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

7.7.8 明細処理
●明細の印刷
 最後に,明細の印刷処理を実装する。明細の印刷にあたっては,基本的に「7.4.7 顧客の印刷処理」で実装したFormPrintPreviewフォーム(Fig.7-45)を利用することになる。しかし,FormPrintPreviewフォームは,印刷の対象がデータグリッドコントロールであることを前提としている。しかし,明細情報を表示するFormSlipDetailフォーム(Fig.7-92)では,データグリッドコントロールではなく,階層フレキシブルグリッドコントロールを利用している。そのため,FormPrintPreviewフォームの処理を一部改良し,階層フレキシブルグリッドコントロールを描画できるような処理に変更する必要がある。

FormPrintPreviewフォームの改良
 ではまず,FormPrintPreviewフォームに改良を加え,データグリッドコントロールだけではなく,階層フレキシブルグリッドコントロールも描画できるような処理を実装してゆく。

 今回は,すでに本節の冒頭でも説明したように,FormSlipDetailフォーム(Fig.7-92)のレイアウトとほぼ同じように印刷物として出力できることを目的とする(Fig.7-84を参照)。具体的には,伝票の冒頭に宛名,伝票番号,納入先などを描画するFormSlipDetailフォームのFRAME_SLIPフレームの内容を描画し,その下にFLXGrid_SlipDetail階層フレキシブルグリッドを描画する。そこでまず,印刷時に印刷すべきフレームと,階層フレキシブルグリッドコントロールを受け取るために,List 7-171に示すSetTitle2というプロシージャをFormPrintPreviewフォームに実装する。

 SetTitle2プロシージャは,印刷すべきフレーム,印刷すべき階層フレキシブルグリッドコントロールを,順に引数にとり,それぞれグローバル変数g_TitleFrameg_FLXGridに格納するというものである。印刷の前処理をするためにすでに実装したSetTitleプロシージャ(List 7-36)では,引数としてタイトル文字列とデータグリッドコントロールを渡していたわけだが,SetTitle2プロシージャは,そのSetTitleプロシージャの引数をフレームと階層フレキシブルグリッドコントロールに変更したものに相当する。ここで保存したグローバル変数,g_TitleFrameg_FLXGridの値は,あとから参照して描画時に用いることになる。

 ユーザーがFormSlipDetailフォーム(Fig.7-92)で[印刷]ボタン(BTN_PRINTボタン)を押したときには,このSetTitle2プロシージャを呼び出して初期化してから,FormPrintPreviewフォームをモーダルウィンドウとして表示する。その実装は,List 7-172のようになる。

 List 7-172を実装することで,ユーザーが[印刷]ボタンを押したときには,FormPrintPreviewフォームがモーダルウィンドウとして表示されるようになる。とはいえ,FormPrintPreviewフォームでプレビュー描画を表示したり印刷処理を実行したりするDrawPreviewプロシージャ(List 7-42)は,SetTitleプロシージャ(List 7-36)で受け渡したタイトル文字列とデータグリッドコントロールを描画する前提となっている。そのため,このままでは正しく動作しない。そこで,FormPrintPreviewフォームのDrawPreviewプロシージャを,List 7-173のように変更する。

 List 7-173において追加したのは,11〜16行目の箇所である。ここでは,グローバル変数g_DGridNothingである場合,DrawPreview2というプロシージャを呼び出すようにした。List 7-171に示したSetTitle2プロシージャにおいてはグローバル変数g_DGridNothingに設定している。そのため,SetTitle2プロシージャを呼び出したとき,つまり,List 7-172に示した[印刷]ボタンが押されたときの処理のようにSetTitle2プロシージャを呼び出してからFormPrintPreviewフォームをモーダル表示したときには,プレビュー描画ならびに印刷をするDrawPreviewプロシージャにおいてDrawPreview2プロシージャが呼び出されるということになる。すなわち,SetTitle2プロシージャで受け渡されたフレームと階層フレキシブルグリッドコントロールの内容をプレビューならびに印刷する処理をDrawPreview2プロシージャに実装すれば,そのフレームと階層フレキシブルグリッドコントロールの内容をプレビュー表示したり印刷したりすることができるようになる。

 以下,このDrawPreview2プロシージャを順に実装してゆく。

Prev 116/134 Next