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

7.4.7 顧客情報の印刷処理
●実装する帳票印刷機能
 実装について説明するまえに,今回どのような帳票印刷を実現するのかについて説明しておく。今回のサンプルでは,やや欲張ってFig.7-40に示すプレビュー機能付きの印刷を実現してみる。

Fig.7-40 実装する帳票印刷機能
fig7_40

 Fig.7-40において,上半分がプレビュー用エリアとなる。プレビュー用エリアのサイズは,その時点で設定されているデフォルトプリンタ(アプリケーションが起動されたときには,Windowsにおいて[通常使うプリンタ]に設定されているプリンタ)の用紙サイズと同じものとし,その右と下にあるスクロールバーによってスクロール表示させることができる。本来ならば,プレビュー画面の拡大や縮小もサポートしたいところではあるが,そこまで作り込むとプログラムが複雑化し,本当に必要な部分がわかりにくくなるため,今回はサポートしないことにする。なお,デフォルトプリンタの用紙サイズを変更する方法については,後述の「7.4.8 用紙サイズとプリンタの機種の変更」で説明する。

 プレビュー用エリアは,当然ながらプリンタに印刷される予定の出力結果を正確に反映したものとなっており,プリンタにはプレビュー用エリアに表示されているとおりに出力する。


One Point! ただし,演算精度を考えると,プレビューとプリンタへの出力結果が厳密にまったく同じであるとはいえない。今回は,単位変換での小数値の丸めは気にしないことにするので,数ミリメートル程度はずれるおそれがある(どのくらいずれるのかはプリンタの解像度に依存する)。しかし,帳票印刷において数ミリメートルの誤差が生じると困るといったことはないと思われるため,今回は精度面での考慮はしない。もし,大きな誤差が生じたとしても,用紙の余白部分を調整すれば,多くの場合は対処できるだろう。

 プレビュー用エリアでは,先頭ページの冒頭にタイトルの文字列(Fig.7-40においては“登録顧客一覧”がタイトルとなっている)を表示し,その下にデータグリッドコントロールの内容を描画する。

 データグリッドコントロールの表示内容は,データグリッドコントロールの表示状況とほぼ同じにする。これは,(1)データグリッドコントロールに連結されているADODB.Recordsetオブジェクトの各フィールドのうち非表示にしているものは印刷しない,(2)各列の幅はユーザーがデータグリッドコントロールの列をマウスでドラッグして調整した幅とほぼ同じにする,という意味である。前者については,データグリッドコントロールの各列を示すColumnオブジェクトのVislbleプロパティがFalseであるものは印刷しないことで対処する。後者については,データグリッドの各列の幅を用紙サイズの幅に合わせて拡大縮小することで対処する(Fig.7-41)。

Fig.7-41 印刷時の列幅の関係
fig7_41

 また,データグリッドコントロールの各セルが列の横幅に入りきらないときには,折り返して複数行に渡って印刷する。さらに,データグリッドの各列を示すColumnオブジェクトのAlignmentプロパティの値を調べ,左寄せ(dbgLeft),センタリング(dbgCenter),右寄せ(dbgRight)のどの状態であるかを確認し,それに沿ったレイアウトで表示する。ちなみに,データグリッドの各列を示すColumnオブジェクトのAlignmentプロパティは,Visual Basicでデータグリッドコントロールのプロパティを表示し,[レイアウト]ページを開くと設定することができる(Fig.7-42)。

Fig.7-42 データグリッドコントロールのプロパティの[レイアウト]ページ
fig7_42

 Fig.7-40の下半分は,余白を調整したり,印刷したりするボタンを配置している箇所である。[余白]の部分で余白を入力し,[適用]ボタンを押すと,指定された余白でプレビュー画面を再表示する。また,出力が複数ページにまたがる場合には,[ページ]の部分に表示したいページ数を入力すると,そのページのプレビュー画面が表示される。

 [印刷]ボタンは,実際に印刷を開始するためのボタンである。[印刷]ボタンが押されたときには,Fig.7-43に示すダイアログボックスを表示し,どの範囲のページを出力するのかを尋ねるものとする。

Fig.7-43 印刷範囲の確認
fig7_43

 Fig.7-43においてユーザーが[OK]ボタンを押すと,プレビュー用エリアに表示されているのと同等の内容が実際にプリンタに出力される。なお,印刷中は,Fig.7-44に示すダイアログボックスを表示し,ユーザーが[キャンセル]ボタンを押したときには印刷をその時点で終了させる機能も設けることにする。

Fig.7-44 印刷中のウィンドウ
fig7_44

 以上がこれから実装しようとしているおおまかな帳票印刷機能である。

Prev 38/134 Next