- 題名: プリントプレビューコントロールで現在表示している位置を知るには
- 日時: 2013/05/28 21:01:14
- ID: 31595
- この記事の返信元:
- (なし)
- この記事への返信:
- [31598] Re[1]: プリントプレビューコントロールで現在表示している位置を知るには2013/05/29 12:57:21
- ツリーを表示
■No31599に返信(dehumanizeさんの記事)
> ページ番号のことではなくズームした場合にページ内のどこを表示しているか、の位置です
座標情報のことでしょうか? だとすれば、それは公開されていないと思います。
どうしても必要なら、PrintPreviewControl には頼らず、
PreviewPrintController を使って自作されてみては如何でしょうか。
一応足掻いてみましたが…このあたりが限界でした。
Imports System.Drawing.Printing
Imports System.Reflection
Public Class Form1
Private WithEvents ppc As New PrintPreviewControl()
Private WithEvents doc As New PrintDocument()
Private WithEvents tm As Timer
Private Sub tm_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles tm.Tick
Me.Text = GetField(Of Point)(ppc, "lastOffset").ToString()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
ppc.Dock = DockStyle.Fill
Controls.Add(ppc)
ppc.Document = doc
ppc.Zoom = 2.5
If Me.components Is Nothing Then
Me.components = New System.ComponentModel.Container()
End If
tm = New Timer(Me.components)
tm.Interval = 55
tm.Start()
End Sub
Private Sub doc_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles doc.PrintPage
e.Graphics.PageUnit = GraphicsUnit.Millimeter
Dim xL As Integer = 0
Dim xR As Integer = e.PageBounds.Right
Dim yT As Integer = 0
Dim yB As Integer = e.PageBounds.Bottom
For x As Integer = xL To xR Step 10
If x Mod 100 = 0 Then
e.Graphics.DrawLine(Pens.Red, x, yT, x, yB)
Else
e.Graphics.DrawLine(Pens.Silver, x, yT, x, yB)
End If
Next
For y As Integer = yT To yB Step 10
If y Mod 100 = 0 Then
e.Graphics.DrawLine(Pens.Blue, xL, y, xR, y)
Else
e.Graphics.DrawLine(Pens.Red, xL, y, xR, y)
End If
Next
End Sub
Private Function GetField(Of T)(ByVal target As Object, ByVal fieldName As String) As T
Dim bf As BindingFlags = BindingFlags.Default
bf = bf Or BindingFlags.GetProperty
bf = bf Or BindingFlags.IgnoreCase
bf = bf Or BindingFlags.NonPublic
bf = bf Or BindingFlags.Public
bf = bf Or BindingFlags.Instance
bf = bf Or BindingFlags.Static
Dim pi As FieldInfo = target.GetType().GetField(fieldName, bf)
If pi Is Nothing Then
Throw New MemberAccessException()
Else
Return CType(pi.GetValue(target), T)
End If
End Function
Private Sub ppc_MouseWheel(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ppc.MouseWheel
Dim cnt As Integer = e.Delta / SystemInformation.MouseWheelScrollDelta
Dim zoom As Double = ppc.Zoom + cnt * 0.05
ppc.Zoom = Math.Max(0.05, zoom)
End Sub
End Class
分類:[.NET]
プリントプレビューコントロールで現在表示している位置を知るにはどうすればよいのでしょう