- 締切済み
VB6の開発中なんですが、印刷処理が・・・
VB6で開発をしています。 印刷時にA4の紙に縦・横中央揃えでど真ん中に、 PictureBoxの絵を印刷したいのですが、 方法がわかりません。 ご教授、宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- k_sidina
- ベストアンサー率52% (9/17)
原因はひょっとしたら scalemode のせいかもしれません。 中央に表示する位置決めをしているロジックの部分は cm で計算を行っていないのに、twip の値が入っているから異常に大きい数値になってしまっているのではないですか? ScaleMode はデフォルトにしていただいた上で、16 になっている数値のところに、「9072」といれてみてください。 また、「Picture1.Image.height」のところも、「9072」としてください。 結果はいかがなりましたでしょうか?
- k_sidina
- ベストアンサー率52% (9/17)
下で書いた私の文章にあやまりがあります。 scalemode を設定されているようですので、引数の記述自体は問題がないようです。 もうしわけありません。(きちんとすべてのソースをみていませんでした) PaintPicture Picture1.Picture, _ height, width, _ ~~~~~~~~~~~~~ 16, 16 '16cmの正方形に印刷したい為、設定 下線の部分に(とりあえず) 0 を指定して印刷した場合、 きちんと印刷されますか?(位置以外、サイズ的に)
補足
はい。0を指定した場合は左上に寄った画像が 印刷されます。
- k_sidina
- ベストアンサー率52% (9/17)
ソースコード中の With Printer .PaintPicture Picture1.Picture, height, width, _ 16, 16 '16cmの正方形に印刷したい為、設定 ~~~~~~ End With ここがおかしかったはずです。 引数のここは cm じゃなくて・・・。 (先ほども書きましたが、今、手元に vb6 のドキュメントがございませんので・・・TWIPs だったような気がするのですが・・・) 申し訳ありませんが、質問者さまの環境にはおそらく vb6 がインストールされていると思いますので、ドキュメントで paintpicture メソッドの引数をご確認いただけませんでしょうか?
- k_sidina
- ベストアンサー率52% (9/17)
これは失礼しました。 ただ、対象を中央にしたいというのも、前述のサイトをアレンジして使えばよいと思いますが、いかがでしょうか? 申し訳ありませんが、今、vb6 がインストールされた環境が手元にないので、回答そのものはここに書くことができません。 前述サイトには 「Printer.PaintPicture Picture1.Image, 0, 0, lngWidth, lngHeight」 とあったと思いますが、この PaintPicture メソッドの引数に適切な値を設定すればよいのではないでしょうか? つまり、第2,3の引数が位置であるようです。 また、前述のサイトには 「lngHeight = Picture1.Height lngWidth = Picture1.Width」 これで、画像のサイズを取得しています。 また、プリンタそのものの高さと幅は 「Printer.Height」 「Printer.Width」 で取得できます。 画像の上位置=(【プリンタの高さ】-【画像の高さ】)/2 こうすることによって中央に設定できるかと思いますが、いかがでしょうか?
お礼
とても早い回答ありがとうございます。 画像の上位置=(【プリンタの高さ】-【画像の高さ】)/2 理論上、上手くいくはずなのですが、 値が以上に高くなり、余白を取り過ぎ、何も印刷されない状況に なってしまいました。 現在、思考錯誤中です。 ソースはこんな感じです。 Private Sub Command3_Click() ' 用紙サイズをA4に設定 Printer.PaperSize = vbPRPSA4 Dim height As Integer Dim width As Integer Printer.ScaleMode = 7 'cmの設定が必要な為、設定 height = (Printer.height - Picture1.Image.height) / 2 width = (Printer.width - Picture1.Image.width) / 2 With Printer .PaintPicture Picture1.Picture, _ height, _ width, _ 16, _ 16 '16cmの正方形に印刷したい為、設定 End With If MsgBox("印刷しますか?", _ vbQuestion Or vbYesNo) = vbYes Then Printer.EndDoc Else Printer.KillDoc End If End Sub
- k_sidina
- ベストアンサー率52% (9/17)
質問者さまは Google 等をご利用になられましたか? 私は参考 URL を Google で見つけることができました。 これで問題は解決できそうですか?
お礼
アドバイスありがとうございます。 参考のサイトは私も見つけて、見たことがありました。 この中では、解決できないんです。 印刷用紙の向きや拡大縮小では無く、 印刷の対象画像を中央に印刷するように ソースの中で設定したいんです。
補足
参考意見ありがとうございます。 結果は真っ黒になってしまいました。