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

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

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

VB 6の資産の移行は?

 さて、ここまでVB 6のPrinterオブジェクトを使用して印刷を行っているコードを、VB 2005のPrintDocumentコンポーネントを使って再現するという方法をご覧いただきました。

 確かにVB 2005のPrintDocumentコンポーネントを使った印刷処理は、VB 6のPrinterオブジェクトを使ったそれよりも洗練されており、使いやすいものとなっています。しかしながら、VB 6のPrinterオブジェクトを使っている印刷プログラムの資産を多くお持ちの方にとっては、それらをPrintDocumentコンポーネントを使ってVB 2005で再構築するというのはおよそ現実的ではないでしょう。

 というわけで、そんな方にとっての最適なソリューションになる(かもしれない)ライブラリ「Printer Compatibility Library 1.0」をご紹介したいと思います。

■Printer Compatibility Library 1.0

 Printer Compatibility Library 1.0は、VB 6のPrinterオブジェクトとPrintersコレクションをVB 2005で再現したライブラリです。これは、「Visual Basic 2005 Power Packs」の1つとして、英語版のみが提供されています。Visual Basic 2005 Power Packsは、マイクロソフトが無償で提供している、VB 2005でのアプリケーション開発を支援するアドイン、コントロール、ツールの集合体です。

 Printer Compatibility Library 1.0を利用することで、VB 6のPrinterオブジェクトを使用した印刷プログラムのコードを、ほぼそのままVB 2005で使用することができます。

 Printer Compatibility Library 1.0は、下記のサイトから単体でダウンロードしてインストールすることができます。

Microsoft Printer Compatibility Library 1.0

 では、実際にPrinter Compatibility Library 1.0を使用する方法をご紹介していきましょう。ここではこのライブラリを使って、リスト1のVB 6のコードをVB 2005で使えるようにしてみます。

 VB 2005でWindowsアプリケーションのプロジェクトを新規に作成し、フォームにボタン(PrintButton)を1つ配置した状態から説明します。

(1)参照設定の追加

 まず、Printer Compatibility Library 1.0への参照設定をプロジェクトに追加しておきます。

 メニューの[プロジェクト]−[参照の追加]をクリックして、[参照の追加]ダイアログを表示させます。[.NET]タブの一覧に「Microsoft.VisualBasic.PowerPacks.Printing.Printer」というコンポーネントが存在しているはずですので、これを選択して[OK]ボタンをクリックします。


図4 [参照の追加]ダイアログ
Printer Compatibility Library 1.0をインストールした時点で、すでにグローバル・アセンブリ・キャッシュ(GAC)に「Microsoft.VisualBasic.PowerPacks.Printing.Printer.dll」が登録されているため、[.NET]タブの一覧で「Microsoft.VisualBasic.PowerPacks.Printing.Printer」を選択できる。

(2)名前空間のインポート

 Printer Compatibility Library 1.0で提供されるPrinterクラスや定数などは、「Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6名前空間」に存在します。毎回この名前空間を宣言するのはちょっと現実的でありませんので、下記のようにファイルの先頭でImportsステートメントを使って名前空間をインポートしておきます。

Imports Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6
Importsステートメントを使った名前空間のインポート

(3)Printerオブジェクトの作成

 インポートした名前空間に存在するPrinterクラスから、オブジェクトを生成します。オブジェクトの名前は何でもかまいませんが、VB 6のコードをできるだけ修正しないようにしたいのであれば、「Printer」という名前で宣言するのがよいでしょう。今回は、ボタンのClickイベント・ハンドラであるPrintButton_Clickメソッド内で宣言することにします。

Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintButton.Click

  Dim Printer As New Printer()

End Sub
「Printer」という名前でPrinterクラスのオブジェクトを生成

(4)VB 6のコードをコピーする

 リスト1のVB 6のコードで、Withステートメントの始まりから終わりまでの部分をそのままコピーして、PrintButton_Clickメソッド内に貼り付けます。

 ただし、まったくそのままのVB 6のコードですといくつかエラーとなってしまう個所がありますので、下記の内容に該当する部分は適宜修正する必要があります。

・カッコ書きやハイフンを使ったパラメータが指定されているVB 6のメソッド

 以下のようなカッコ書きやハイフンを使ったパラメータは、それぞれの値を別々のパラメータとして指定するように書き換えます。

VB 6 .Line (30, 70)-(180, 70), vbBlue
VB 2005 .Line(30, 70, 180, 70, vbBlue)
書き換え例

・Bオプション、Fオプションが指定されているVB 6のメソッド

 VB 6でのBオプションとFオプションのパラメータは、Printer Compatibility Library 1.0ではメソッドのパラメータとして指定します。以下の例のように各パラメータでTrueを指定すれば、それぞれのオプションを指定した場合と同じ動作となります。

VB 6 .Line (30, 90)-(90, 150), vbRed, BF
VB 2005 .Line(30, 90, 90, 150, vbRed, True, True)
書き換え例

・Printerオブジェクトとは直接関係のない関数などが使われている場合

 Printer Compatibility Library 1.0で提供されるのは、あくまでPrinterオブジェクトに直接関係するメンバだけですので、それとは直接関係のない関数などについては、対応する.NETのメンバに書き換える必要があります。

VB 6 .PaintPicture LoadPicture("C:\vblab.bmp"), 30, 240
VB 2005 .PaintPicture(New Bitmap("C:\vblab.bmp"), 30, 240)
書き換え例
LoadPicture関数をBitmapクラスのコンストラクタ呼び出しに書き換えている。

 なお、メソッドやプロパティのリファレンスを含め、Printer Compatibility Library 1.0に関するすべてのドキュメントは以下のフォルダにある「Printer Compatibility Library Help.htm」に集約されています。

\Program Files
  \Microsoft Visual Basic 2005 Power Packs
    \Printing\Printer\Documentation

 以上の修正を反映したコードが下記のリスト3になります。

Imports Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6

Public Class Form1

  Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintButton.Click

    Dim Printer As New Printer()

    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
      .Print("テスト印刷")

      ' 点線の描画
      .DrawStyle = vbDot
      .DrawWidth = 20
      .Line(30, 70, 180, 70, vbBlue)

      ' 四角形の描画
      .DrawStyle = vbSolid
      .Line(30, 90, 90, 150, vbRed, True, True)

      ' 円の描画
      .FillColor = vbGreen
      .FillStyle = vbSolid
      .Circle(140, 120, 30, vbGreen)

      ' 網掛けの四角形の描画
      .FillColor = vbCyan
      .FillStyle = vbCross
      .Line(30, 170, 180, 220, vbCyan, True)

      ' 画像の描画
      .PaintPicture(New Bitmap("C:\vblab.bmp"), 30, 240)

      ' 2ページ目の作成
      .NewPage()
      .CurrentX = 30
      .CurrentY = 30
      Printer.Print("2ページ目")

      .EndDoc()

    End With

  End Sub

End Class
リスト3 Printer Compatibility Library 1.0を利用したVB 2005のコード
リスト1のVB 6のコードを基に、Printer Compatibility Library 1.0を使ってVB 2005用に修正したもの

 参考までに、このPrinter Compatibility Library 1.0を使ったコードの印刷結果も掲載しておきます。


図5 リスト3のVB 2005プログラムの実行結果
「Microsoft Office Document Image Writer」を通常使うプリンタに設定し、リスト3のコードで印刷される内容をプレビューさせたもの。左側が1ページ目で、右側が2ページ目となっている。

 Printer Compatibility Library 1.0には、DrawWidthプロパティが1よりも大きい値の場合にはDrawStyleプロパティの値にかかわらずすべて実線で描画されるといった制限も存在するため、VB 6の印刷結果(図1)とまったく同じになっているわけではありません。しかしながら、VB 6のコードをわずかに手直しするだけでほぼ同じ内容の印刷プログラムをVB 2005で再現することができるというのは、非常に魅力的ではないでしょうか。

 以上、今回はVB 2005のPrintDocumentコンポーネントを使った印刷方法、ならびにVB 6のPrinterオブジェクトを使った印刷プログラムの資産を活用するのに役立つPrinter Compatibility Library 1.0をご紹介しました。これら2つのアプローチを、プロジェクトによって使い分けていくというのが良い選択といえそうです。

 Visual Basic 2005 Power Packsには、VB 6のPrintFormメソッドを再現してくれる「PrintForm Component 1.0」など、Printer Compatibility Library 1.0以外にも便利なツールが提供されています。興味のある方はぜひ試してみてください。では、次回をお楽しみに。End of Article


 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