DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームの画面コピー

  • 題名: フォームの画面コピー
  • 著者: トマトスープ
  • 日時: 2012/02/27 19:08:15
  • ID: 29953
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[OS:XP 言語:VB.NET VisualBasic2008]
分類:[.NET]

お世話になっております。

現在、フォームの画面コピーをとり
その画面を印刷するPGを作成しているのですが
いくつか問題点があり躓いております。

こちらコードです。

Public Sub PrintForm(ByVal frm As Form)
'フォームのイメージを取得する
memoryImage = CaptureControl(frm)
'フォームのイメージを印刷する
Dim PrintDocument1 As New System.Drawing.Printing.PrintDocument
AddHandler PrintDocument1.PrintPage, _
AddressOf PrintDocument1_PrintPage
PrintDocument1.Print()
memoryImage.Dispose()
End Sub

<System.Runtime.InteropServices.DllImport("gdi32.dll")> _
Private Shared Function BitBlt(ByVal hdcDest As IntPtr, _
ByVal nXDest As Integer, ByVal nYDest As Integer, _
ByVal nWidth As Integer, ByVal nHeight As Integer, _
ByVal hdcSrc As IntPtr, _
ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
ByVal dwRop As Integer) As Boolean
End Function

Private Const SRCCOPY As Integer = &HCC0020

'フォームのイメージを取得する
Public Function CaptureControl(ByVal ctrl As Control) As Bitmap
Dim g As Graphics = ctrl.CreateGraphics()
Dim img As New Bitmap(ctrl.ClientRectangle.Width, _
ctrl.ClientRectangle.Height, g)
Dim memg As Graphics = Graphics.FromImage(img)
Dim dc1 As IntPtr = g.GetHdc()
Dim dc2 As IntPtr = memg.GetHdc()
BitBlt(dc2, 0, 0, img.Width, img.Height, dc1, 0, 0, SRCCOPY)
g.ReleaseHdc(dc1)
memg.ReleaseHdc(dc2)
memg.Dispose()
g.Dispose()
Return img
End Function

'PrintDocument1のPrintPageイベントハンドラ
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
e.Graphics.DrawImage(memoryImage, 0, 0)
End Sub

Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

PrintForm(Me)

End Sub

フォームロード時に開いているフォームの画面コピーを
とって印刷するようになっています。

そして問題点ですが・・・印刷物の上下左右の余白の
設定の方法がわかりません。

もしお分かりになる方いらっしゃいましたら
教えて頂ければと思います。
よろしくお願いします。
■No29953に返信(トマトスープさんの記事)
> 現在、フォームの画面コピーをとり
API を呼ぶ代わりに、Graphics.CopyFromScreen メソッドを使う手もありますね。


> そして問題点ですが・・・印刷物の上下左右の余白の
> 設定の方法がわかりません。
下記を参照してみてください。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard35.htm
http://dobon.net/vb/dotnet/graphics/pagesetupdialogbug.html


なお、画像自体の拡大・縮小などが必要な場合は、
> e.Graphics.DrawImage(memoryImage, 0, 0)
のコードを修正してみてください。
http://msdn.microsoft.com/ja-jp/library/system.drawing.graphics.drawimage.aspx
  • 題名: Re[2]: フォームの画面コピー
  • 著者: トマトスープ
  • 日時: 2012/03/01 16:32:35
  • ID: 30021
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
魔界の仮面弁士様

ご回答ありがとうございます。

サイトまで載せて頂き大変助かりました。
物凄く分かり易かったです。
お陰様で無事解決することができました。

また何かありましたらよろしくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板