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

タイトル Re^3: ページ設定ダイアログボックスの設定
投稿日: 2008/02/08(Fri) 15:18
投稿者ひでと
遅くなりまして申し訳ありません。教えていただいてからいろいろ試してみました。

> 試すなり、よく見るなりしてから質問された方が...。
すいません...。
>
> 印刷位置の原点(0,0 )は使用しているプリンターの印刷開始位置であって
> 最近のプリンターなら、インクジェット式は、用紙の3mm 、3mm でレーザープリンタは
> 5mm , 5mm 位がその原点になるかと、従ってプリンターによって、用紙への印刷開始位置
> が違うのでその分を考慮しないと用紙サイズからの印刷位置は、設定位置の位置とその分
> 誤差が生じます。
> >ダイアログボックスの余白をすべて10mmにすると、左上が15,15に印刷されてしまいます
> すなわちご使用のプリンターの印刷開始位置は、用紙の5mm , 5mm の位置になっている
> かと思います。(5mm 以内の位置には印刷できない)
>
理解いたしました。ご報告させていただきます。
ページ設定ダイログの余白にあらかじめ数字を入れておきたいと考えましたが、
PageSetupDialog1.PageSettings.Margins.Left=200 とすると
ダイアログの左余白に20mmが設定されて表示できました。
ダイアログボックスをOKで終了させると、PageSetupDialog1.PageSettings.Margins.Left
の値は79となっていました。ここで 勝手にmm単位からインチ単位の変換がされていたのが、
非常に混乱した部分です。
また、ダイアログボックスでは あたかも用紙からの余白が設定できるように、
表示されていましたので、印刷位置の原点は用紙左上であると思い込んでおりました。

以下は 「印刷」フォームを表示させたときにあらかじめ余白を設定し、
ページ設定ダイアログを表示するときに、設定した余白をダイアログに反映させ、
HardMargin以下に余白を設定できないようにしようと考えたものです。
ご指摘がありましたら、お願いします。

    Dim PrnSet As New Printing.PrinterSettings
    Dim PapSet As New Printing.PageSettings
    Private Sub 印刷_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        With PapSet.Margins '1mm=39.37*0.01in
            .Left = 20 * 39.37 / 10 '左端を20mmに設定
            .Right = 10 * 39.37 / 10
            .Top = 10 * 39.37 / 10
            .Bottom = 10 * 39.37 / 10
        End With
        With PrnSet.DefaultPageSettings
            If .HardMarginX < PapSet.Margins.Left Then
                PapSet.Margins.Left = PapSet.Margins.Left - .HardMarginX
            Else
                PapSet.Margins.Left = 0
            End If
            If .HardMarginX < PapSet.Margins.Right Then
                PapSet.Margins.Right = PapSet.Margins.Right + .HardMarginX
            Else
                PapSet.Margins.Right = .HardMarginX * 2 + 1 * 39.37 / 10 'ぎりぎりだと印刷出来なかったので
            End If
            If .HardMarginY < PapSet.Margins.Top Then
                PapSet.Margins.Top = PapSet.Margins.Top - .HardMarginY
            Else
                PapSet.Margins.Top = 0
            End If
            If .HardMarginY < PapSet.Margins.Bottom Then
                PapSet.Margins.Bottom = PapSet.Margins.Bottom + .HardMarginY
            Else
                PapSet.Margins.Bottom = .HardMarginY * 2 + 1 * 39.37 / 10 'ぎりぎりだと印刷出来なかったので
            End If
        End With
        PrintDocument1.DefaultPageSettings = PapSet
    End Sub
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        PrintDocument1.Print()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim DPapSet As New Printing.PageSettings
        Dim Ret As DialogResult
        PrintDialog1.PrinterSettings = New Printing.PrinterSettings
        With PrintDialog1
            .UseEXDialog = False
            .AllowSelection = False
        End With
        Ret = PrintDialog1.ShowDialog()
        PrnSet = PrintDialog1.PrinterSettings
        If Ret = Windows.Forms.DialogResult.OK Then PrnSet = PrintDialog1.PrinterSettings
        PrintDocument1.PrinterSettings = PrnSet

        PageSetupDialog1.PageSettings = New Printing.PageSettings
        With PageSetupDialog1.PageSettings
            .PaperSize = PrnSet.DefaultPageSettings.PaperSize
            .Landscape = PrnSet.DefaultPageSettings.Landscape
        End With
        DPapSet = PapSet
Dialog_Show:
        With PageSetupDialog1.PageSettings.Margins 'ここで設定する数字は1/10mm単位
            .Left = (DPapSet.Margins.Left + DPapSet.HardMarginX) / 39.37 * 100
            .Right = (DPapSet.Margins.Right - DPapSet.HardMarginX) / 39.37 * 100
            .Top = (DPapSet.Margins.Top + DPapSet.HardMarginY) / 39.37 * 100
            .Bottom = (DPapSet.Margins.Bottom - DPapSet.HardMarginY) / 39.37 * 100
        End With
        Ret = PageSetupDialog1.ShowDialog
        If Ret = Windows.Forms.DialogResult.OK Then PapSet = PageSetupDialog1.PageSettings
        '出てくる数字は1/100インチ単位
        With PrnSet.DefaultPageSettings
            If .HardMarginX < PapSet.Margins.Left Then
                PapSet.Margins.Left = PapSet.Margins.Left - .HardMarginX
            Else
                DPapSet.Margins.Left = DPapSet.HardMarginX
                GoTo Re_Dialog_Show
            End If
            If .HardMarginX < PapSet.Margins.Right Then
                PapSet.Margins.Right = PapSet.Margins.Right + .HardMarginX
            Else
                DPapSet.Margins.Right = DPapSet.HardMarginX * 2
                GoTo Re_Dialog_Show
            End If
            If .HardMarginY < PapSet.Margins.Top Then
                PapSet.Margins.Top = PapSet.Margins.Top - .HardMarginY
            Else
                DPapSet.Margins.Top = DPapSet.HardMarginX
                GoTo Re_Dialog_Show
            End If
            If .HardMarginY < PapSet.Margins.Bottom Then
                PapSet.Margins.Bottom = PapSet.Margins.Bottom + .HardMarginY
            Else
                DPapSet.Margins.Bottom = DPapSet.HardMarginX
                GoTo Re_Dialog_Show
            End If
        End With
        PrintDocument1.DefaultPageSettings = PapSet
        Exit Sub
Re_Dialog_Show:
        Beep()
        GoTo Dialog_Show
    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.DrawLine(New Pen(Color.Black, 0), _
          e.MarginBounds.Left, e.MarginBounds.Top, _
          e.MarginBounds.Right, e.MarginBounds.Top)
        e.Graphics.DrawLine(New Pen(Color.Black, 0), _
          e.MarginBounds.Left, e.MarginBounds.Bottom, _
          e.MarginBounds.Right, e.MarginBounds.Bottom)
        e.Graphics.DrawLine(New Pen(Color.Black, 0), _
         e.MarginBounds.Left, e.MarginBounds.Top, _
         e.MarginBounds.Left, e.MarginBounds.Bottom)
        e.Graphics.DrawLine(New Pen(Color.Black, 0), _
         e.MarginBounds.Right, e.MarginBounds.Top, _
         e.MarginBounds.Right, e.MarginBounds.Bottom)
        e.HasMorePages = False
    End Sub

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

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