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

7.4.7 顧客情報の印刷処理
●プレビュー処理

getMaxPageプロシージャの作成
 では次に,データグリッドの内容を出力しようとしたときに全部で何ページになるのかを計算するgetMaxPageプロシージャを作成する。getMaxPageプロシージャは,すでにForm_Activateプロシージャ(List 7-38)の60行目で使っている。

 全部で何ページになるのかを計算するということを考えるとやや複雑そうであるが,実際にはさほど難しくない。なぜなら,List 7-42に示したDrawPreviewプロシージャが,描画したページ数を返すように作ってあるためである。

 DrawPewviewプロシージャを使って無限に大きなページ番号まで描画させるようにすれば,その戻り値として全ページ数が得られる。実際にgetMaxPageプロシージャを実装すると,List 7-43のようになる。

 ページ数を求めているのは,5行目である。5行目ではDrawPreviewプロシージャを使って1ページ目から65535ページ目までを描画している。65535ページ目というのは,普通に印刷する限り,これだけのページは越えないだろうと筆者が想定した適当な値である。65535という値自体に特別な意味があるわけではない。このように,十分な大きなページ数まで描画しようとDrawPreviewプロシージャに依頼すると,DrawPreviewプロシージャはデータグリッドに表示されている全行を描画し,そのページ数を戻り値として返す。よって,最大のページ番号が得られるというわけである。

 なお,3行目でPicDocピクチャボックスのVisibleプロパティをFalseにして一時的にPicDocピクチャボックスを非表示にしているのは,DrawPreviewプロシージャが実際に描画するところをユーザーから隠したいからである。5行目でDrawPreviewプロシージャを呼び出すと,実際にPicDocピクチャボックスにプレビュー画面を描画されてしまうので,もし3行目がないとユーザーは全ページが描画されたPicDocピクチャボックスを見ることになってしまう。それでは内部でプログラムが何をやっているのかわかってしまい,少々格好悪いので,見えないようにしただけの話である。

 また,7行目のIf文は,もしDrawPreviewプロシージャの戻り値が0以下であった場合には,強制的にに最大ページ番号を1にするための処理である。すでにDrawPewviewプロシージャの処理で説明したように,DrawPreviewプロシージャは,エラーがあったときには値として-1を返すように実装してある。そこで,エラーが発生したときには,強制的に最大ページ番号を1とみなすことにした。

Prev 53/134 Next