DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PrintDocument1.OriginAtMarginsとe.Graphics.ResetTransformの関係

分類:[.NET]

■開発環境:VB2010

■現象
X座標は同じ2線分を描画しているが、X座標が横方向にずれます。
@PrintDocument1.OriginAtMargins = Falseにすれば、現象が発生しない。
APrintDocument1.OriginAtMargins = Trueでも、
e.Graphics.ResetTransform()がコメントなら現象が発生しない。

ハード余白が無効になっているように気がしますが、
対応策はあるでしょうか?

■以下、ソース
'Button、PrintPreviewDialog、PrintDocumentを張り付ける

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PrintDocument1.OriginAtMargins = True '<−−−
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
End Sub

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

Dim x1, y1, x2, y2 As Integer

x1 = 100
y1 = 50
x2 = 100
y2 = 200
e.Graphics.DrawLine(Pens.Black, x1, y1, x2, y2)

e.Graphics.ResetTransform() '<−−−


x1 = 100
y1 = 300
x2 = 100
y2 = 400
e.Graphics.DrawLine(Pens.Red, x1, y1, x2, y2)

End Sub
2011/10/19(Wed) 22:07:41 編集(投稿者)

■No29268に返信(kohaさんの記事)

そういう仕組みになってしまっているのでしょう。

Dim rect = e.Graphics.VisibleClipBounds

e.Graphics.ResetTransform() '<−−−
e.Graphics.TranslateTransform(-rect.X, -rect.Y)

こんなんはだめですか?
■No29269に返信(shuさんの記事)
> 2011/10/19(Wed) 22:07:41 編集(投稿者)
>
> ■No29268に返信(kohaさんの記事)
>
> そういう仕組みになってしまっているのでしょう。
>
> Dim rect = e.Graphics.VisibleClipBounds
>
> e.Graphics.ResetTransform() '<−−−
> e.Graphics.TranslateTransform(-rect.X, -rect.Y)
>
> こんなんはだめですか?

上記ソースで解決しました。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板