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
|
'Eviter les boucles sur les objets à imprimer(faute courante...)
'dans l'event PrintPage quand on peut avoir plusieurs pages
'utiliser un compteur de page
Public Class Form2
'rectangle remplace les images
Private ListeRectangle As List(Of Rectangle) = New List(Of Rectangle)
Public Sub New()
' Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
Me.ResizeRedraw = True
End Sub
Private Sub BtnLoadImages_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLoadImages.Click
Dim rnd As Random = New Random
For i As Integer = 0 To 39
Dim rc As Rectangle = _
New Rectangle(0, 0, _
rnd.Next(100, 300), rnd.Next(100, 150))
Liste_Image.Items.Add(rc)
Next
totalImage = Liste_Image.Items.Count - 1
End Sub
Private Sub BtnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPrint.Click
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.Show()
End Sub
Private totalImage As Integer = 0
Private incImage As Integer = 0
Private Sub Generer(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
e.Graphics.PageUnit = GraphicsUnit.Display
Dim rndColor As Random = New Random()
Dim penRect As Pen = New Pen(Color.Black, 2)
Dim brushRect As SolidBrush = Nothing
' largeur hauteur de page courante .
Dim bottomPage As Integer = e.MarginBounds.Bottom
Dim rightPage As Integer = e.MarginBounds.Right
Dim posX As Integer = e.MarginBounds.Left
Dim posY As Integer = e.MarginBounds.Top
Dim rect As Rectangle
' boucles whiles gerent les objets d'une page
' pas les objets du document en entier (liste_image)
While (posY + rect.Height) <= bottomPage
rect = Liste_Image.Items(incImage)
While (posX + rect.Width) <= rightPage And incImage < totalImage
brushRect = New SolidBrush( _
Color.FromArgb(rndColor.Next(120, 255), rndColor.Next(120, 255), rndColor.Next(120, 255)))
'draw filled rect
e.Graphics.FillRectangle(brushRect, posX, _
posY, rect.Width, rect.Height)
'draw rect
e.Graphics.DrawRectangle(penRect, posX, _
posY, rect.Width, rect.Height)
incImage += 1
posX += rect.Width
rect = Liste_Image.Items(incImage)
End While
incImage -= 1
rect = Liste_Image.Items(incImage)
posX = e.MarginBounds.Left
posY += rect.Height
incImage += 1
End While
's'il y a plusieurs page ,continue à te declencher cher
'printpage
e.HasMorePages = (incImage < totalImage)
'----------------ce code est un raccourci de---------------
'If incImage < totalImage Then
' e.HasMorePages = True
'End If
End Sub
End Class |