- 題名: プリントプレビューコントロールで現在表示している位置を知るには
- 日時: 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]
プリントプレビューコントロールで現在表示している位置を知るにはどうすればよいのでしょう