1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
'un ListBox pour gerer les differents ZOOM
'un PrintPreviewControl1
'un Button Apercu
'Une Classe TexteDocument pour gerer un Document Texte(numeropage,offset)
'Un tableau string pour -definir les lignes de texte-
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Drawing.Printing
Partial Public Class frmPrintMonTexte
Private doc As PrintDocument
Private Sub frmPrintMonTexte_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Fixe les choix Zoom dans un ListBox
For i As Integer = 1 To 10
listBoxZoom.Items.Add((i * 10).ToString)
Next
' Cree un document texte avec 100 lignes.
Dim Texte_Imprimer As String() = New String(100) {}
For i As Integer = 1 To 100
Texte_Imprimer(i) = i.ToString
Texte_Imprimer(i) += ": Mon texte à imprimer decoupe en lignes..."
Next
'Init classe TexteDocument avec le texte à imprimer
Dim doc As New TexteDocument(Texte_Imprimer)
'Definit Handler pour event PrintPage
AddHandler doc.PrintPage, AddressOf Doc_PrintPage
' Definit zoom initial dans ListBox à "100"
listBoxZoom.Text = "100"
'Configure le controle PrintPreviewControl pour afficher :
'la page à 100% (Zoom = 1)
PrintPreviewControl1.Zoom = 1
'2 pages verticalement (Rows = 2).
PrintPreviewControl1.Rows = 2
'Assigne la variable "doc" à PrintPreviewControl1.Document
PrintPreviewControl1.Document = doc
End Sub
Private Sub cmdPrint_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnPrintApercu.Click
' Reinitialise le Zoom.
PrintPreviewControl1.Zoom = Single.Parse(listBoxZoom.Text) / 100
' Rebinde le PrintDocument pour rafraichir l'Apercu.
PrintPreviewControl1.Document = doc
End Sub
Private Sub Doc_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
' Retrouve le document qui a declenche cet event.
Dim doc As TexteDocument = DirectCast(sender, TexteDocument)
' Fixe le font et hauteur de ligne suivant font.
Using fnt As New Font("Arial", 10)
Dim lineHeight As Single = Font.GetHeight(e.Graphics)
' Cree 2 variables pour memoriser position dans page
'(hors marges).
Dim xPosPage As Single = e.MarginBounds.Left
Dim yPosPage As Single = e.MarginBounds.Top
' Incremente compteur de page (page à imprimer).
doc.NumeroPage += 1
' Imprime tout texte tenant sur une page.
' Boucle se termine quand prochaine ligne courante va au dela
' marge basse , ou il n' y a plus de lignes sur la page .
While ((yPosPage + lineHeight) < e.MarginBounds.Bottom And doc.Offset _
<= doc.Texte.GetUpperBound(0))
e.Graphics.DrawString(doc.Texte(doc.Offset), Font, _
Brushes.Black, xPosPage, yPosPage)
' Incremmente ligne suivante du doc.
doc.Offset += 1
' Incremmente Coords Y de ligne suivante.
yPosPage += lineHeight
End While
If doc.Offset < doc.Texte.GetUpperBound(0) Then
' S'il y a encore au moins une page .
' declenche PrintPage.
e.HasMorePages = True
End If
End Using
End Sub
End Class
Public Class TexteDocument
Inherits PrintDocument
Private m_Texte As String()
Private m_NumeroPage As Integer
Private m_Offset As Integer
Public Sub New(ByVal txt As String())
Me.Texte = txt
End Sub
Public Property Texte() As String()
Get
Return m_Texte
End Get
Set(ByVal value As String())
m_Texte = value
End Set
End Property
Public Property NumeroPage() As Integer
Get
Return m_NumeroPage
End Get
Set(ByVal value As Integer)
m_NumeroPage = value
End Set
End Property
Public Property Offset() As Integer
Get
Return m_Offset
End Get
Set(ByVal value As Integer)
m_Offset = value
End Set
End Property
End Class |
Partager