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
|
'Version revisee pour eliminer la "function"
'On utilise simplement une variable globale "numeroItem"
'1/Initialise à zero(index de depart du ListBox part à zero)
'Quand on lance l'ogre Print il trouve 0 et il itere sur les items
'2/Quand numeroItem = 2 on lui indique fin de page
'et on met numeroItem=3 pour qu'il demarre la nouvelle boucle à 3
'Comme l'ogre Print se presente à nouveau dans sa boucle infernale
'il trouve numeroItem =3 et ainsi de suite
'3/Quand il atteint ListBox.Count-1 il sort du while
'On lui presente un caillou brulant "hasmorepages=false"
'il s'etrangle et quitte sa boucle infernale
Public Class Form3
Dim numeroItem As Integer = 0
Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ListBox1.Items.Clear() ' chargement
ListBox1.Items.Add("Maître Corbeau sur un arbre perché")
ListBox1.Items.Add("Tenait don son bec un fromage")
ListBox1.Items.Add("Maître Renard par l'odeur alléchée")
ListBox1.Items.Add("Lui tint à peu près ce langage")
ListBox1.Items.Add("Eh bonjour Monsieur du Corbeau")
ListBox1.Items.Add("Que vous êtes joli, que vous me semblez beau")
ListBox1.Items.Add("Sans mentir, si votre ramage se rapporte à votre plumage,")
ListBox1.Items.Add("Vous êtes le phénix des hôtes de ces bois")
ListBox1.Items.Add("A ces mots le corbeau ne se sent pas de joie")
ListBox1.Items.Add("Et pour montrer sa belle voix")
ListBox1.Items.Add("Il ouvre un large bec laisse tomber sa proie")
ListBox1.Items.Add("Le renard s'en saisit et dit: Mon bon Monsieur, Apprenez que tout flatteur")
ListBox1.Items.Add("Vit aux dépens de celui qui l'écoute")
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim maFonte As New Font("Times New Roman", 12, FontStyle.Regular)
'Interligne necessaire en GDI
Dim hauteurLigne = maFonte.GetHeight
'coord X du texte
Dim xPos As Integer = e.MarginBounds.Left
'coord Y du texte
Dim yPos As Integer = e.MarginBounds.Top
Dim totalItem As Integer = Me.ListBox1.Items.Count
' Itere sur les items du ListBox.
Dim ligne As String = ""
Do While numeroItem < totalItem - 1
ligne = Me.ListBox1.Items(numeroItem)
e.Graphics.DrawString(ligne, Me.ListBox1.Font, _
Brushes.Black, xPos, yPos)
' demande un saut de page si .....
If numeroItem = 2 Then
e.HasMorePages = True
numeroItem = 3
Return
ElseIf numeroItem = 6 Then
e.HasMorePages = True
numeroItem = 7
Return
End If
' ligne suivante et item suivant
yPos += hauteurLigne
numeroItem += 1
Loop
' impression termine.
e.HasMorePages = False
numeroItem = 0
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Me.PrintDocument1.Print()
Me.PrintPreviewControl1.Zoom = 1.0
'nombre de pages d'apercu(pas necessairement egale à celle du docuument reel)
Me.PrintPreviewControl1.Rows = 4
Me.PrintPreviewControl1.Document = Me.PrintDocument1
End Sub
End Class |
Partager