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

タイトル Re^2: 自己レスです
投稿日: 2009/01/13(Tue) 09:59
投稿者ひでと
複数ページ印刷テスト用の処理をつくりました。
ここの処理でもう1週間程悩んでいます。紙も100枚ちかく・・・。
なにとぞ、ご助言をお願いします。

Public Class Form1
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        With Me.PrintDocument1.DefaultPageSettings.Margins
            .Left = 80
            .Right = 40
            .Top = 40
            .Bottom = 40
        End With
    End Sub

    Dim Max As Integer

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _
    Button1.Click
        Me.PrintPreviewDialog1.Document = Me.PrintDocument1
        Me.PrintPreviewDialog1.ShowDialog()
    End Sub

    Dim PrintAction As System.Drawing.Printing.PrintAction

    Private Sub PrintDocument1_BeginPrint _
    (ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) _
    Handles PrintDocument1.BeginPrint
        PrintAction = e.PrintAction
        Max = 3
    End Sub

    Private Sub PrintDocument1_PrintPage _
    (ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) _
    Handles PrintDocument1.PrintPage
        Dim X As Integer = e.MarginBounds.X
        Dim Y As Integer = e.MarginBounds.Y
        Dim Width As Integer = e.MarginBounds.Width
        Dim Height As Integer = e.MarginBounds.Height

        e.Graphics.DrawRectangle(Pens.Black, e.MarginBounds)
        e.Graphics.DrawLine(Pens.Black, X, Y, X + Width, Y + Height)
        e.Graphics.DrawLine(Pens.Black, X + Width, Y, X, Y + Height)
        Max = Max - 1
        If Max > 0 Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
        End If
    End Sub

    Private Sub PrintDocument1_QueryPageSettings _
    (ByVal sender As Object, ByVal e As System.Drawing.Printing.QueryPageSettingsEventArgs) _
    Handles PrintDocument1.QueryPageSettings
        'e.PageSettings.Margins をDefaultに戻そうとしてもうまくいかない?
        e.PageSettings.Margins = Me.PrintDocument1.DefaultPageSettings.Margins
        With e.PageSettings
            Select Case PrintAction
                Case Printing.PrintAction.PrintToFile
                    If .HardMarginX < .Margins.Left Then
                    Else
                        .Margins.Left = .HardMarginX
                    End If
                    If .HardMarginX < .Margins.Right Then
                    Else
                        .Margins.Right = .HardMarginX
                    End If
                    If .HardMarginY < .Margins.Top Then
                    Else
                        .Margins.Top = .HardMarginY
                    End If
                    If .HardMarginY < .Margins.Bottom Then
                    Else
                        .Margins.Bottom = .HardMarginY
                    End If
                Case Printing.PrintAction.PrintToPreview
                    If .HardMarginX < .Margins.Left Then
                    Else
                        .Margins.Left = .HardMarginX
                    End If
                    If .HardMarginX < .Margins.Right Then
                    Else
                        .Margins.Right = .HardMarginX
                    End If
                    If .HardMarginY < .Margins.Top Then
                    Else
                        .Margins.Top = .HardMarginY
                    End If
                    If .HardMarginY < .Margins.Bottom Then
                    Else
                        .Margins.Bottom = .HardMarginY
                    End If
                Case Printing.PrintAction.PrintToPrinter
                    If .HardMarginX < .Margins.Left Then
                        .Margins.Left = .Margins.Left - .HardMarginX
                    Else
                        .Margins.Left = 1 * 39.37 / 10
                    End If
                    If .HardMarginX < .Margins.Right Then
                        .Margins.Right = .Margins.Right + .HardMarginX
                    Else
                        .Margins.Right = .HardMarginX * 2 + 1 * 39.37 / 10
                    End If
                    If .HardMarginY < .Margins.Top Then
                        .Margins.Top = .Margins.Top - .HardMarginY
                    Else
                        .Margins.Top = 1 * 39.37 / 10
                    End If
                    If .HardMarginY < .Margins.Bottom Then
                        .Margins.Bottom = .Margins.Bottom + .HardMarginY
                    Else
                        .Margins.Bottom = .HardMarginY * 2 + 1 * 39.37 / 10
                    End If
            End Select
        End With
    End Sub

End Class

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

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