Impression d'un panel en intégrant un Rectangleshape
jerlo11
Messages postés109Date d'inscriptionmardi 19 mai 2015StatutMembreDernière intervention17 novembre 2022
-
19 mai 2015 à 15:02
jerlo11
Messages postés109Date d'inscriptionmardi 19 mai 2015StatutMembreDernière intervention17 novembre 2022
-
23 mai 2015 à 21:44
Bonjour à tous ami(e)s développeur
Je recherche en vain une solution pour imprimer mon panel avec la prise en charges des rectangleshape, j'ai beau chercher là je ne n'ai plus de piste
J'arrive pour le moment à imprimer mon panel avec du texte et des images avec mon bout de code ci-dessous.
Sur la form j'utilise un "PrintForm1" et un "PrintDocument1".
Quand je clic sur mon bouton impression :
Private Sub BarButtonItem4_ItemClick(ByVal sender As System.Object, ByVal e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem4.ItemClick
'Imprimer le récap
Panel8.VerticalScroll.Value = 0
PrintDocument1.Print()
End Sub
Code pour la prise en charge de l'impression du panel avec texte et image
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Static page As Integer = 1
Dim startPosition As Integer = (page - 1) * PrintDocument1.DefaultPageSettings.Bounds.Height
Static maxPages As Integer = 0
If page = 1 Then
For Each ctrl As Control In Me.Panel8.Controls
If TypeOf ctrl Is TextBox Or TypeOf ctrl Is Label Or TypeOf ctrl Is PictureBox Then
ctrl.Tag = Int((ctrl.Top + ctrl.Height) / PrintDocument1.DefaultPageSettings.Bounds.Height) + 1
If CInt(ctrl.Tag) > maxPages Then maxPages = CInt(ctrl.Tag)
End If
Next
End If
For Each ctrl As Control In Me.Panel8.Controls
If CInt(ctrl.Tag) = page Then
If TypeOf ctrl Is TextBox Or TypeOf ctrl Is Label Then
Dim sf As New System.Drawing.StringFormat
If TypeOf ctrl Is TextBox Then
If DirectCast(ctrl, TextBox).TextAlign = HorizontalAlignment.Right Then
sf.Alignment = StringAlignment.Far
Else
sf.Alignment = StringAlignment.Near
End If
ElseIf TypeOf ctrl Is Label Then
If DirectCast(ctrl, Label).TextAlign = ContentAlignment.TopLeft Then
sf.Alignment = StringAlignment.Near
ElseIf DirectCast(ctrl, Label).TextAlign = ContentAlignment.TopRight Then
sf.Alignment = StringAlignment.Far
End If
End If
sf.FormatFlags = StringFormatFlags.NoClip
e.Graphics.DrawString(ctrl.Text, ctrl.Font, New SolidBrush(ctrl.ForeColor), New RectangleF(ctrl.Left, ctrl.Top - startPosition, ctrl.Width + 50, ctrl.Height), sf)
ElseIf TypeOf ctrl Is PictureBox Then
e.Graphics.DrawImage(DirectCast(ctrl, PictureBox).Image, New RectangleF(ctrl.Left, ctrl.Top - startPosition, ctrl.Width, ctrl.Height))
ElseIf TypeOf ctrl Is Label Then
e.Graphics.DrawString(Me.Text, Me.Font, Brushes.DarkBlue, New RectangleF(ctrl.Left, ctrl.Top - startPosition, ctrl.Width, ctrl.Height))
End If
End If
Next
page += 1
If page > maxPages Then
e.HasMorePages = False
page = 1
maxPages = 0
Else
e.HasMorePages = True
End If
End Sub
J'aimerai dans ce dernier bout de code pouvoir imprimer également des RectangleShape est-ce que cela en est possible ??
Merci à toute les personnes qui pourrai m'aider.
Vous remerciant par avance,
cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 19 mai 2015 à 15:52
Bonjour,
Je te propose une capture de ton panel avec tout ce qui s'y trouve. Ensuite tu imprimes ton image. Cela se fait en 2 temps, c'est l'inconvénient. enfin si tu ne trouves pas mieux:
jerlo11
Messages postés109Date d'inscriptionmardi 19 mai 2015StatutMembreDernière intervention17 novembre 2022 22 mai 2015 à 08:26
hello,
J'aurai souhaiter conserver mon bout de code qui fonctionne super bien pour imprimer la totalité d'un panel meme avec un scrollbar et uniquement y intégrer le rectangle shape dans le style :
If TypeOf ctrl Is TextBox Or TypeOf ctrl Is Label Or TypeOf ctrl Is PictureBox Or TypeOf ctrl Is Rectangleshape Then ctrl.Tag = Int((ctrl.Top + ctrl.Height) /