タイトル | : Re^3: PrintFormへの用紙設定 |
記事No | : 11566 |
投稿日 | : 2015/12/24(Thu) 19:47 |
投稿者 | : 花ちゃん |
> Win32 API の BitBlt を使ってやってみます。
BitBlt を使っての Windows フォームを印刷する MSDN のサンプル https://msdn.microsoft.com/ja-jp/library/cc464071(v=vs.71).aspx
CopyFromScreen を使っての Windows フォームを印刷する MSDN のサンプル https://msdn.microsoft.com/ja-jp/library/6he9hz8c(v=vs.110).aspx
CopyFromScreen を使ったサンプル、必要なコントロールは貼り付けておいて下さい。 尚、マージンの設定は、プリンター独自の印刷余白は考慮しておりません。 下記も参考にして下さい。 http://www.hanatyan.sakura.ne.jp/vb2005/vb2013print04.htm
Public Class Form1
Private printerPageSetting As New System.Drawing.Printing.PageSettings
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'ページ設定ダイアログの設定及び表示 '現在のページ設定ダイアログの設定を指定 With printerPageSetting.Margins .Left = CInt(.Left * 2.54 / 10) * 10 .Top = CInt(.Top * 2.54 / 10) * 10 .Right = CInt(.Right * 2.54 / 10) * 10 .Bottom = CInt(.Bottom * 2.54 / 10) * 10 End With PageSetupDialog1.PageSettings = printerPageSetting 'ページ設定ダイアログの設定 OK ボタンがクリックされたらプレビュー表示 If PageSetupDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then Button2.PerformClick() End If End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Call CaptureScreen()
'印刷プレビューのダイアログボックスの表示位置と大きさを設定 'ページ設定ダイアログの設定の内容を反映 PrintDocument1.DefaultPageSettings = printerPageSetting
PrintPreviewDialog1.Document = PrintDocument1 '★表示位置を設定 PrintPreviewDialog1.StartPosition = FormStartPosition.Manual PrintPreviewDialog1.Location = New Point(450, 20) '★表示するダイアログの大きさを設定する PrintPreviewDialog1.Size = New Size(440, 640) '★印刷プレビューの表示倍率を指定 PrintPreviewDialog1.PrintPreviewControl.Zoom = 0.4 PrintPreviewDialog1.ShowDialog() End Sub
Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 'Form を印刷 e.Graphics.DrawImage(memoryImage, e.MarginBounds.Left, e.MarginBounds.Top) End Sub
Dim memoryImage As Bitmap '下記の部分は、 MSDN のサンプルを利用(これでは、Form の枠やタイトルバーが写るので) Private Sub CaptureScreen() Dim myGraphics As Graphics = Me.CreateGraphics() Dim s As Size = Me.Size memoryImage = New Bitmap(s.Width, s.Height, myGraphics) Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage) memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s) End Sub
'Form の枠やタイトルバーが邪魔ならこちらを Private Sub CaptureScreen() Dim myGraphics As Graphics = Me.CreateGraphics() Dim s As Size = Me.ClientSize Dim cx As Integer = Me.Width - Me.ClientSize.Width Dim cy As Integer = Me.Height - Me.ClientSize.Height cx = cx \ 2 cy = cy - cx memoryImage = New Bitmap(s.Width, s.Height, myGraphics) Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage) memoryGraphics.CopyFromScreen(Me.Location.X + cx, Me.Location.Y + cy, 0, 0, s) End Sub
End Class
|