Q&A-印刷編

印刷に関する質問をまとめました。

NT4.0で、印刷ダイアログの設定が有効となりません。どうすれば良いのでしょう?
PrintForm で Picture コントロールの内容が印刷できません。どうすれば印刷できますか?
MDI の親フォームを PrintForm で印刷するには?
Printerオブジェクトで、「データが複雑で処理が間に合いませんでした。」が表示されるのですが?


Q NT4.0で、印刷ダイアログの設定が有効となりませんどうすれば良いのでしょう?

NT4.0上で、VB5.0、VB6.0 のコモン ダイアログ コントロールで印刷ダイアログをを表示して、Printer オブジェクトの印刷部数や用紙方向などを設定しましたが、指定した内容が有効になりませんどうしたら良いでしょうか?

A API を使用して、[印刷]ダイアログを表示してください

MSのサイトでは、[印刷]ダイアログを表示するプログラムをコピーして、実行してくださいと記述されてます。ただし、両面印刷、印刷方向の設定をサポートして無いプリンタを使用した場合は、エラーが発生するとも書いてあります。
詳細に付いては、Microsoft の以下のサイトを参考にしてください。(1999/3/19 のアドレスです、見つからない場合は、検索で文書番号の J042959 を検索してください)


http://www.microsoft.com/mscorp/worldwide/japan/support/kb/articles/j042/9/59.htm


(注意)
ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q PrintForm で Picture コントロールの内容が印刷できません。どうすれば印刷できますか?

Form に Picture コントロールを貼付けて Line や Circle で描画した後に、PrintForm で印刷しましたが、Picture コントロールの枠のみが印刷されて、Picture コントロールに描画した図形が印刷されません。どうすれば印刷できるでしょうか?


A まず AutoRedraw を True に設定してください。

まずは、Picture コントロールの AutoRedraw プロパティを True に設定してください。それでも、印刷できない場合は、PrintForm メソッドを使う前に対象となるコントロールの Picture プロパティにそのコントロールの Image プロパティを代入してください。

(例)
Picture1.Picture = Picture1.Image

詳細に付いては、Microsoft の以下のサイトを参考にしてください。(1999/3/29 のアドレスです、見つからない場合は、検索で文書番号の J027618  を検索してください)

http://www.microsoft.com/japan/support/kb/articles/j027/6/18.htm

また、このサイトの MDI の親フォームを PrintForm で印刷するには? では、CaptureWindow とい関数を使用して PrintForm の各種トラブルに対応する方法を記述しています。


(注意)
ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q MDI の親フォームを PrintForm で印刷するには?

MDI の親フォームを PrintForm で印刷しようとすると、コンパイルエラーになります。どうにか、PrintForm のように印刷できないでしょうか?

A CaptureWindow で印刷できます

Microsoft の以下のサイトを参考に CaptureWindow という関数を作成してください。(1999/4/10 のアドレスです、見つからない場合は、検索で文書番号の J042088 を検索してください)

http://www.asia.microsoft.com/japan/support/kb/articles/j042/0/88.htm


CaptureWindow という関数を使用して以下のコードを作成すれば、MDIForm でも印刷可能です。

Dim p As Picture

Set p = CaptureWindow(Me.hWnd, False, 0, 0, _
    Me.Width / Screen.TwipsPerPixelX, _
    Me.Height / Screen.TwipsPerPixelY)
Printer.PaintPicture p, 0, 0, Me.Width, Me.Height
Printer.EndDoc

ここでの Me は、MDI の親フォームです。

(Point) 上記のコードの使用すれば、MDI の親フォームだけでなく、PrintForm の各種トラブルに対応できます。Me の代わりに印刷したいフォームやウィンドウを指定してください。

(注意)
ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。


Q Printerオブジェクトで、「データが複雑で処理が間に合いませんでした。」が表示されるのですが?

VB5の印刷処理でPrinterオブジェクトを使用しているのですが、「データが複雑で処理が間に合いませんでした。」というメッセージが表示され、うまく印刷できない場合があります。(印刷の一部が切れてしまいます。)レーザープリンタを使用して、データ量が多い印刷処理を実行した場合によく発生する傾向があるようなのですが、原因がわからず困っております。どうしたら良いでしょうか?

A 頁ごとに印刷したほうが無難なようです

MSのサイトには、「フォント関連のプロパティすべてと DrawWidth プロパティ、FillStyle プロパティ、FontTransparent プロパティは各ページごとに設定する必要があります。なお、同じ設定を使用する場合は、他の設定に変更した後に、実際の設定を行う必要があります。」と書いてあります。基本的に、頁ごとに印刷したほうが無難なようです。
それにしてもあまりにも、ひどい...(^^;
詳細に付いては、Microsoft の以下のサイトを参考にしてください。(1999/4/23 のアドレスです、見つからない場合は、検索で文書番号の J041403J027618 を検索してください)

http://www.microsoft.com/japan/support/kb/articles/j041/4/03.htm
http://www.microsoft.com/japan/support/kb/articles/j027/6/18.htm

(注意)
ここでの情報については、あくまでも各自の責任にて、ご使用ください。内容に関する質問については、回答できる保証がありませんので、予めご了承願います。