Impression du Form mais l'image est coupée.

Signaler
Messages postés
22
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
14 mars 2021
-
Messages postés
7334
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 avril 2021
-
Bonjour à tous,
Bonjour le Forum,

Je requière l'aide du forum, lorsque je lance l'impression du formulaire tout ce passe bien, mais l'image n'est pas entière, il manque la partie droite.

Voici le code.

  Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
   hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
   Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
   hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer,
   ByVal dwRop As System.Int32) As Long
    Dim memoryImage As Bitmap
    Private Sub CaptureScreen()
        Dim mygraphics As Graphics = Me.CreateGraphics()
        Dim s As Size = Me.Size
        memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
        Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
        Dim dc1 As IntPtr = mygraphics.GetHdc
        Dim dc2 As IntPtr = memoryGraphics.GetHdc
        BitBlt(dc2, 0, 0, Me.ClientRectangle.Width,
        Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
        'Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
        mygraphics.ReleaseHdc(dc1)
        memoryGraphics.ReleaseHdc(dc2)

    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object,
       ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
       PrintDocument1.PrintPage
        e.Graphics.DrawImage(memoryImage, 0, 0)

    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click

          
        CaptureScreen()
        PrintDocument1.Print()

    End Sub


Merci à vous.

6 réponses

Messages postés
7334
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 avril 2021
122
Bonjour,

tu trouveras ici la capture d'un form ainsi que d'autre control:

https://codes-sources.commentcamarche.net/source/54783-capture-de-controles

Messages postés
22
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
14 mars 2021

Merci pour le lien, la capture fonctionne dans l'appli capture de contrôle, mais de mon côté, lors que je le transpose sur un bouton dans mon form ( bouton que j'ai testé dans l'appli capture de contrôle) j'ai une erreur sur ConvertForm_BMP " la ligne avant Else".


Imports System.IO.Path

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click

Dim sFilePath As String
Dim ext As String
Dim sfd As New SaveFileDialog
With sfd

.Title = "Enregistrer l'image"
.FileName = "Capture"
.Filter = "JPeg Files (*.jpg,*.jpeg)|*.jpg;*.jpeg|Bitmap Files (*.bmp)|*.bmp|Gif Files (*.gif)|*.gif|Tif Files (*.tif)|*.tif|Png Files (*.png)|*.png"
.FilterIndex = 1

If .ShowDialog() = Windows.Forms.DialogResult.OK Then
sFilePath = .FileName 'chemin de l'image enregistrée
ext = GetExtension(sFilePath) 'extension seule

ConvertForm_BMP(Me, sFilePath, ext) ' ConvertForm_BMP souligné en rouge

Else
MessageBox.Show("Opération annulée par l'utilisateur!", "Enregistrement image", MessageBoxButtons.OK, MessageBoxIcon.Information)

Exit Sub

End If

.Dispose()
End With
End Sub
Messages postés
7334
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 avril 2021
122
Si tu veux que cela fonctionne, il faut intégrer le Module Capture_Bitmap dans ton projet!

voilà

@+
Messages postés
2400
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 avril 2021
130
Bonjour à vous deux
Pour Tempus01 : enlevez le
Exit Sub
dans votre code afin que le
.Dispose()
puisse se faire si vous annulez l'opération .
Et aussi pour poster du code sur le forum prière de suivre ce tuto : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code . Votre code sera bien plus lisible et en couleur . Ainsi @karamel ne sera pas obligé de le modifier pour le rendre plus agréable à lire .
Merci

Messages postés
22
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
14 mars 2021

Bonjour cs_Le Pivert, vb95
Bonjour le Forum,

@cs_Le Pivert, effectivement, j'étais complètement passé à coté du module, merci.

@vb95, merci pour Exit Sub, je viens de lire le lien qui explique comment intégrer le code correctement.

Maintenant que la capture se fait correctement, il me reste à l'envoyer vers l'imprimante,
Pouvez-vous me dire comment procéder ?

Voici le code du bouton qui génère la capture.
 Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click

        Dim sFilePath As String
        Dim ext As String
        Dim sfd As New SaveFileDialog
        With sfd

            .Title = "Enregistrer l'image"
            .FileName = "Capture"
            .Filter = "JPeg Files (*.jpg,*.jpeg)|*.jpg;*.jpeg|Bitmap Files (*.bmp)|*.bmp|Gif Files (*.gif)|*.gif|Tif Files (*.tif)|*.tif|Png Files (*.png)|*.png"
            .FilterIndex = 1

            If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                sFilePath = .FileName 'chemin de l'image enregistrée
                ext = GetExtension(sFilePath) 'extension seule

                ' ConvertForm_BMP(Me, sFilePath, ext)
                ConvertTabPage_BMP(TabPage1, sFilePath, ext)
            Else
                MessageBox.Show("Opération annulée par l'utilisateur!", "Enregistrement image", MessageBoxButtons.OK, MessageBoxIcon.Information)

                'Exit Sub

            End If

            .Dispose()
        End With
    End Sub
la capture.



Merci à vous,
Messages postés
7334
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
12 avril 2021
122
Il faut récupérer le chemin de l'image lors de son enregistrement dans une variable comme ceci:

 chemin = .FileName


ensuite il suffit de se servir de cette variable:

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim dllg As New PrintPreviewDialog 'aperçu avant impression
        dllg.Document = PrintDocument1()
        dllg.ShowDialog()
        'PrintDocument1.Print()
    End Sub
    Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) _
                Handles PrintDocument1.PrintPage
        Dim newImage As Image = Image.FromFile(chemin)
        e.Graphics.DrawImage(newImage, 0, 0)
    End Sub


Voilà

@+ Lev Pivert
Messages postés
2400
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
12 avril 2021
130
Bonjour
tu nous dis : Maintenant que la capture se fait correctement, il me reste à l'envoyer vers l'imprimante,
Pouvez-vous me dire comment procéder ?

As-tu cherché sur le moteur de recherche du site dans les sources déposées ? ou sur un moteur de recherche sur Internet ,
Je vous ai dit aussi d'enlever le
Exit Sub
. Vous l'avez mis en commentaire .

Tout comme la ligne en commentaire en vert au-dessus du
ConvertTabPage_BMP
. Mettre comme commentaire
 ' conversion Form en fichier image
me semble plus judicieux .

Messages postés
22
Date d'inscription
mercredi 6 janvier 2021
Statut
Membre
Dernière intervention
14 mars 2021

Bonsoir vb95,

Oui, j'ai cherché sur le site et j'ai trouver et appris beaucoup, j'ai des notes de partout sur le bureau et, je suis loin d'avoir tester toutes les infos que j'ai récupéré.

Pour l'impression, les sujets sont multiples et très intéressent, mais pour le moment les codes que j'ai essayé d'adapter pour imprimer la capture d'écran générer par le code un peu plus haut ne fonctionnent pas.

Pour EXIT Sub, j'avais mis une apostrophe pour tester plus rapidement, il est bien retirer maintenant.

En ce qui concerne le commentaire 'conversion Form en fichier image, je suis d'accord, il est plus représentatif.

Merci,

Bonne soirée.