タイトル | : Re^3: ページ設定ダイアログボックスの設定 |
記事No | : 6957 |
投稿日 | : 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
|