|
 |
連載:アップグレード・ウィザードに学ぶVB 6→VB 2005
第4回 アップグレード・ウィザードもお手上げ? VB 6と.NETの印刷の違い
グレープシティ株式会社 八巻 雄哉
2007/04/17 |
|
今回取り上げるVisual Basic 6.0(以下VB 6)の特殊オブジェクトは「Printerオブジェクト」です。VB 6では、このPrinterオブジェクトを利用して文字列や図形を印刷することができました。
以下のリスト1は、VB 6でPrinterオブジェクトを使って印刷するサンプル・プロジェクトのコードです。
Private Sub PrintButton_Click()
With Printer
' 用紙方向を縦に設定
.Orientation = vbPRORPortrait
' 用紙サイズをA4に設定
.PaperSize = vbPRPSA4
' 座標単位をミリメートルに設定
.ScaleMode = vbMillimeters
' 文字列の描画
.FontSize = 72
.FontName = "MS 明朝"
.FontBold = True
.FontItalic = True
.FontUnderline = True
.ForeColor = vbBlack
.CurrentX = 30
.CurrentY = 30
Printer.Print ("テスト印刷")
' 点線の描画
.DrawStyle = vbDot
.DrawWidth = 20
Printer.Line (30, 70)-(180, 70), vbBlue
' 四角形の描画
.DrawStyle = vbSolid
Printer.Line (30, 90)-(90, 150), vbRed, BF
' 円の描画
.FillColor = vbGreen
.FillStyle = vbSolid
Printer.Circle (140, 120), 30, vbGreen
' 網掛けの四角形の描画
.FillColor = vbCyan
.FillStyle = vbCross
Printer.Line (30, 170)-(180, 220), vbCyan, B
' 画像の描画
.PaintPicture LoadPicture("C:\vblab.bmp"), 30, 240
' 2ページ目の作成
.NewPage
.CurrentX = 30
.CurrentY = 30
Printer.Print "2ページ目"
.EndDoc
End With
End Sub
|
|
リスト1 Printerオブジェクトを使ったVB 6のサンプル・プロジェクトのコード |
フォーム上には1つのボタン(PrintButton)が配置されているものとする。 |
このサンプル・プロジェクトを実行すると、下記の図1のように、2ページにわたっていくつかのグラフィックが印刷されます。

|
図1 リスト1のVB 6プログラムの実行結果 |
「Microsoft Office Document Image Writer」を通常使うプリンタに設定し、リスト1のコードで印刷される内容をプレビューさせたもの。左側が1ページ目で、右側が2ページ目となっている。 |
いつもどおりであれば、ここでアップグレード・ウィザードを使ってコードを変換するところですが、残念ながら今回はそうはいきません。
今回のタイトルからすでにお気付きかもしれませんが、Printerオブジェクトとそのすべてのメンバはアップグレード・ウィザードではまったく変換されず、以下の図2のようにすべてアップグレード・エラーとなってしまいます。

|
図2 リスト1のコードをアップグレード・ウィザードを使って変換した結果 |
Printerオブジェクトに関するコードにはすべて「アップグレードされませんでした。」というコメントが挿入されている。 |
VB 6のPrinterオブジェクトを使った印刷では、描画を含めページの終わりや印刷の終わりといった宣言もすべてPrinterオブジェクトのプロパティやメソッドを操作することで行っていました。この方法は非常にシンプルであるため手軽に扱うことができますが、印刷するページ数が多くなるにつれコードが煩雑になってしまうというデメリットがありました。
Visual Basic 2005(以下VB 2005)では印刷の手順が大きく変わりました。VB 2005では、印刷が必要なときにページ単位にイベントが発生し、イベント・ハンドラ内でグラフィック描画メソッドを呼び出して描画を行うイベント・ドリブン(イベント駆動型)の印刷処理が採用されています。ページ単位の印刷処理にマッチした手法となったことで、開発者は描画処理のコードに集中することができるようになっています。
しかしながら、構造的に大きく異なってしまったため、アップグレード・ウィザードによる機械的な変換では対応することができません。そうすると、アップグレード・ウィザードからは学べないということになってしまいますが、印刷は業務アプリケーションで欠かすことのできない処理です。
そこで今回は、リスト1のPrinterオブジェクトを使用して印刷を行うVB 6のコードを手動でVB 2005に変換し、ポイントとなる部分について解説していきたいと思います。
業務アプリInsider 記事ランキング
本日
月間