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

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

・タイトルの描画
 255行目以降が,実際の描画処理となる。まず,257〜259行目において,描画のカレントポジションを描画領域(用紙サイズから余白部分を除いた部分)の左上に合わせる。カレントポジションとは,Printメソッドを使って文字を描画するときなどに,描画開始点となる座標のことである。Visual Basicでは,CurrentXプロパティでカレントポジションのX座標を,CurrentYプロパティでカレントポジションのY座標を,それぞれ設定または取得することができる。

 261〜271行目がタイトルを描画する処理である。もし描画対象が先頭ページであれば,グローバル変数g_Titleに格納されている(List 7-36SetTitleプロシージャを参照)タイトル文字をmyPrintプロシージャを使って描画する(267行目)。また,タイトル文字の後ろには,改行を2つ描画するようにした(268行目と269行目)。

 myPrintプロシージャは,24〜43行目に記述したプロシージャである。Printメソッドを使って,第1引数で渡されたオブジェクトに第2引数で渡された文字列を描画する働きを持つ。ただし,第3引数にFalseが渡されたときには,Printメソッドを使って描画するのではなく,カレントポジションの位置だけを変更する。

 Printメソッドは文字列を描画したあと,描画した文字幅と文字高さだけカレントポジションを進める。そこで,描画しない場合には,40行目と41行目にあるように,カレントポジションの幅と高さをそれぞれ文字列の幅と高さの分だけ加え,Printメソッドで文字列を描画しなくてもカレントポジションだけは移動するという擬似的な処理をした。40行目と41行目にあるように,文字列の幅と高さはそれぞれTextWidthメソッドとTextHeightメソッドを使うことで取得できる。TextWidthメソッドもTextHeightメソッドも,その時点で設定されているフォントで描画する場合の幅と高さを返す。よって,設定されているフォントによって戻り値は違うし,フォントによってはカーニング(文字詰め)されることもあるから,文字数が同じであっても渡す文字列によって返される値は異なる(たとえば,プロポーショナルフォントの場合,“w”という文字の幅は“i”という文字の幅よりも広いのが一般的である)。

 267行目〜269行目にあるmyPrintプロシージャの呼び出しでは,第3引数にdrawFlag変数を渡すようにした。すでに説明したように,drawFlag変数はその時点のページが描画ページ範囲内であればTrue,そうでなければFalseを格納している。よって,myPrintプロシージャを呼び出すときには,描画ページ内であればPrintメソッドを使って文字列が描画されるが,そうでない場合には描画せずにカレントポジションの位置だけを変更するという処理が実現される。つまり,描画しなくてもカレントポジションを進ませることで,改ページが必要かどうかを判断することができるようになるのである(その判断についてはのちに説明する)。

 ところで,266行目ではフォントの設定をしているので,その点について補足説明をしておこう。266行目にあるStdFontとは,デフォルトフォントのことである。Newキーワードを使いStdFontオブジェクトを実体化し,オブジェクトのFontプロパティに設定すると,そのオブジェクトのフォントがデフォルトフォントに設定される。

 デフォルトフォントを再設定する意図はあまりないが,場合によってはDrawPreviewプロシージャの第1引数(objPic引数)に渡された描画対象のオブジェクトのフォントがデフォルトフォントになっていない可能性がある。今回はDrawPreviewプロシージャでは,第1引数にPicDocピクチャボックスかPrinterオブジェクトのいずれかのオブジェクトを渡し,PicDocピクチャボックスに対してもプリンタに対しても同じように描画できるようにする。だが,両者で使っているフォントが違っていると,PicDocピクチャボックスでの描画状態――つまりプレビュー画面――と,Printerオブジェクトでの描画状態――つまりプリンタに出力される結果――とが異なることになってしまう。そこで,フォントを統一化するために,あえてデフォルトフォントを再設定するようにした。

 ここでは,StdFontフォントを使いデフォルトフォントを用いているが,タイトルはより目立たせたいという場合もあるだろう。そのような場合には,266行目の後ろにフォント名やフォントサイズを変更するような処理を加えればよい。たとえば,次のような処理を加えると,タイトルが24ポイントのMSゴシックで表示されるようになる(Fig.7-54)。

objPic.Font.Name = "MS ゴシック"
objPic.Font.Size = 24
Fig.7-54 タイトルの大きさを変更した結果
fig7_54

Prev 50/134 Next