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

Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 - Modifié le 9 janv. 2021 à 17:59
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 - 11 janv. 2021 à 08:52
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

cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
9 janv. 2021 à 17:04
Bonjour,

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

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

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
Modifié le 9 janv. 2021 à 21:58
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
0
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
Modifié le 9 janv. 2021 à 22:42
Si tu veux que cela fonctionne, il faut intégrer le Module Capture_Bitmap dans ton projet!

voilà

@+
0
vb95 Messages postés 3418 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 31 mai 2023 165
Modifié le 10 janv. 2021 à 03:44
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

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
10 janv. 2021 à 11:14
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,
0
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
11 janv. 2021 à 08:52
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vb95 Messages postés 3418 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 31 mai 2023 165
Modifié le 10 janv. 2021 à 15:25
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 .

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
Modifié le 10 janv. 2021 à 21:45
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.
0