Imprimer un form VB.net

Signaler
Messages postés
24
Date d'inscription
mardi 3 avril 2012
Statut
Membre
Dernière intervention
28 juin 2012
-
medamineboulbhaiem
Messages postés
24
Date d'inscription
mardi 3 avril 2012
Statut
Membre
Dernière intervention
28 juin 2012
-
Bonjour
je veux imprimer des forms dans mon application sous vb.net
j'ai utilisé 'PrintForm' le problème c'est qu'il ne m'imprime pas tout le form il capture juste la moitié, je crois qu'il le prend en mode portrait et moi je veu qu'il le capture en mode paysage
est ce quelqu’un a déjà eu le même problème ? j'ai cherché partout sans trouver la solution

7 réponses

Messages postés
24
Date d'inscription
mardi 3 avril 2012
Statut
Membre
Dernière intervention
28 juin 2012
1
merci joe pour votre reponse
j'ai essayé le code du 2em boutton sa marche mais il me capture l'ecran avec l'entete du form et ne capture qu'une partie du form et pas le form complet

le code du premier me donne une errerur "l'exception notImplementedException na pas été géré"
dans le code:
Private Function PrintPreviewControl1() As Object
Throw New NotImplementedException "ici "
End Function
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
47
Salut

une class qui permet d'imprimer la form sans
la bordure ou d'imprimer un control de la form

Imports System.Drawing.Printing
Public Class ClassImpression
    Private myimage As Bitmap
    Private thectrl As Control

    Private Function Capturectrl(ByVal ctrl As Control) As Bitmap
        Dim memoryImage As Bitmap
        Dim memoryGraphics As Graphics
        memoryImage = Nothing
        Dim mygraphics As Graphics = ctrl.CreateGraphics()
        Dim s As Size = ctrl.Size
        If TypeOf ctrl Is Form AndAlso DirectCast(ctrl, Form).FormBorderStyle <> FormBorderStyle.None Then
            memoryImage = New Bitmap(s.Width - 10, s.Height - (SystemInformation.FrameBorderSize.Width + 6 + SystemInformation.CaptionHeight), mygraphics)
            memoryGraphics = Graphics.FromImage(memoryImage)
            memoryGraphics.CopyFromScreen(0, (SystemInformation.FrameBorderSize.Width + 0 + SystemInformation.CaptionHeight), 0, 0, New Size(memoryImage.Width, memoryImage.Height), CopyPixelOperation.SourceCopy)
        Else
            memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
            memoryGraphics = Graphics.FromImage(memoryImage)
            memoryGraphics.CopyFromScreen(ctrl.Left, ctrl.Top, 0, 0, New Size(memoryImage.Width, memoryImage.Height), CopyPixelOperation.SourceCopy)
        End If
        Return memoryImage
    End Function
    Public Function GetPreview() As Bitmap
        Return Capturectrl(thectrl)
    End Function
    Public Sub printdoc()
        Try
            Dim prtd As New PrintDialog

            'document à imprimer
            Dim doc As New PrintDocument
            myimage = Capturectrl(thectrl)
            AddHandler doc.PrintPage, AddressOf printform
            'paramètres de page
            Dim ps As New PageSettings
            ps.Landscape = False
            doc.DefaultPageSettings = ps
            'indique à la prévisualisation le document à montrer
            prtd.Document = doc
            If prtd.ShowDialog = DialogResult.OK Then
                prtd.Document.Print()
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub printform(ByVal sender As Object, ByVal e As PrintPageEventArgs)
        Try
            e.Graphics.DrawImage(myimage, 0, 0)
            e.HasMorePages = False
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Public Sub New(ByVal ctrl As Control)
        thectrl = ctrl
    End Sub
End Class


pour utiliser

Dim printer As New ClassImpression(me)
 printer.printdoc()


si tu veux seulement imprimer par ex le picturebox
Dim printer As New ClassImpression(picturebox1)
printer.printdoc()
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
3
Bonjour,

Voici, tu as a priori la possibilité de décider de l'orientation...



' Impression de la form
Sub Button1_Click(...
Me.PrintPreviewControl1.Zoom = 0.6
Me.PrintPreviewControl1.Rows = 1
Dim PageSetupDialog As New PageSetupDialog()
PageSetupDialog.Document = PrintDocument1
PageSetupDialog.PageSettings.Landscape = True
Me.PrintPreviewControl1.Document = Me.PrintDocument1
End Sub

Sub Button2_Click(...
Dim PageSetupDialog As New PageSetupDialog()
PageSetupDialog.Document = PrintDocument1
PageSetupDialog.PageSettings.Landscape = True
Me.PrintDocument1.Print()
End Sub

Sub PrintDocument1_PrintPage(...
Dim bmp As New Bitmap(Me.Width, Me.Height, Imaging.PixelFormat.Format32bppArgb)
Me.DrawToBitmap(bmp, New Rectangle(0, 0, Me.Width, Me.Height))
e.Graphics.DrawImage(bmp, 10, 10)
End Sub



Cordialement, Joe.
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
3
Suite,

Je n'en sais pas davantage, faut chercher un peu, voir comment mettre un zoom pour rétrécir si ça sort de la feuille... Voir s'il y a une instruction qui permet de sauter l'entête...
???

Cordialement, Joe.
Messages postés
24
Date d'inscription
mardi 3 avril 2012
Statut
Membre
Dernière intervention
28 juin 2012
1
voila ce que j'ai mis comme code


Private Sub Button5_Click_1(sender As System.Object, e As System.EventArgs) Handles Button5.Click
Dim pf As New PrintForm
pf.PrinterSettings.DefaultPageSettings.Margins = New system.Drawing.Printing.Margins(0, 0, 0, 0)
pf.Form = Me
pf.PrintAction = Printing.PrintAction.PrintToPrinter
pf.Print()
End Sub

il imprime sans entête mais il prend le format portrait c'est la raison pour la quelle le form n'est pas complètement imprimé la partie droite n'est pas imprimé
je crois qu'il y'aura des instructions pour designer le format paysage c'est ce que je n'ai pas trouvé
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
3
Suite 2,

Vois avec tes objets d'impression, quand tu écris le nom de l'objet suivit d'un point, une liste te propose les fonctions, regarde si tu as quelques chose, ou encore, sélectionne l'objet et appuies sur F1, tu auras toute la doc de ce dernier.

Bon courage, cordialement, Joe.
Messages postés
24
Date d'inscription
mardi 3 avril 2012
Statut
Membre
Dernière intervention
28 juin 2012
1
merci ShayW je l'ai testé mais ça capture aussi tout l’écran (comme le PrintScreen)