tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: PrintFormへの用紙設定
投稿日: 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
 

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。