連載:アップグレード・ウィザードに学ぶVB 6→VB 2005

第4回 アップグレード・ウィザードもお手上げ? VB 6と.NETの印刷の違い

グレープシティ株式会社 八巻 雄哉
2007/04/17
Page1 Page2 Page3


Back Issue
1
AppオブジェクトからMyオブジェクトへ
2
ClipboardオブジェクトとMy.Computer.Clipboardオブジェクト
3
ココが違う! VB 6と.NETのコントロール・コレクション

 今回取り上げる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に変換し、ポイントとなる部分について解説していきたいと思います。


 INDEX
  アップグレード・ウィザードに学ぶVB 6→VB 2005
  第4回 アップグレード・ウィザードもお手上げ? VB 6と.NETの印刷の違い
  1.アップグレード・ウィザードでも変換できないVB 6のコード
    2.VB 2005における印刷処理のコーディング
    3.VB 6の資産の移行は?
 
インデックス・ページヘ  「アップグレード・ウィザードに学ぶVB 6→VB 2005」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH