IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Comment Imprimer TableLayoutPanel


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut Comment Imprimer TableLayoutPanel
    Bonjour, j'ai fais un post il y a quelques secondes pour imprimer un DataGridView. Le besoin à changé et je doit maintenant imprimer un TableLayoutPanel.

    Celui ci contient deux autres TableLayoutPanel. Dans les deux enfants, il y a des labels, une grille et une picturebox.

    Je n'arrive pas à adapter le code pour imprimer la grille que j'avais obtenu ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Sub KryptonButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KryptonButton1.Click
            Me.PrintDocument.Print()
        End Sub
     
        Private Sub PrintDocument_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
            Dim myPaintArgs As New PaintEventArgs(e.Graphics, New Rectangle(New _
               Point(0, 0), Me.tbPrint.Size))
            Me.InvokePaint(Me.tbPrint, myPaintArgs)
        End Sub
    Il semblerais que le : Me.InvokePaint(Me.tbPrint, myPaintArgs) ne soit pas récursif.
    Jusqu'a présent, j'ai besoin de tableau pour la mise en forme de ma fenêtre, peut être ne n'utilise pas les bons composant pour imprimer.

    Vous avez une idée ? (Je cherche aussi un tutorial sur l'impression en dotnet)

    Merci !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Pour imprimer en dotNet, il existe, en cherchant avec ton ami google, de nombreux tutos très bien faits.
    Par exemple, dirige toi vers le travail de Philippe Lasserre, ici même sur developpez.com

  3. #3
    Membre confirmé
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    A partir de : http://plasserre.developpez.com/v4-11.htm il suffit de modifier ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    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)
       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 PrintButton_Click(ByVal sender As System.Object, ByVal e As _
       System.EventArgs) Handles PrintButton.Click
       CaptureScreen()
       PrintDocument1.Print()
    End Sub
    en cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
        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()
            Application.DoEvents()
            Dim Height As Integer = Me.Height
            Me.Height = 800
            Application.DoEvents()
            Dim mygraphics As Graphics = Me.tbPrint.CreateGraphics()
            Dim s As Size = Me.tbPrint.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.tbPrint.ClientRectangle.Width, _
               Me.tbPrint.ClientRectangle.Height, dc1, 0, 0, 13369376)
            mygraphics.ReleaseHdc(dc1)
            memoryGraphics.ReleaseHdc(dc2)
            Me.Height = Height
        End Sub
        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _
           ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
           PrintDocument.PrintPage
            e.Graphics.DrawImage(memoryImage, 0, 0)
        End Sub
        Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e As _
           System.EventArgs) Handles KryptonButton1.Click
            CaptureScreen()
            Dim dlg As New PrintDialog
            dlg.Document = PrintDocument
            Dim result As DialogResult = dlg.ShowDialog()
            If (result = System.Windows.Forms.DialogResult.OK) Then
                PrintDocument.Print()
            End If
        End Sub
    La partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            Application.DoEvents()
            Dim Height As Integer = Me.Height
            Me.Height = 800
            Application.DoEvents()
    [...]
      Me.Height = Height
    permet d'agrandir la fenêtre afin d'enlever la scrollbar à l'image imprimé.

    C'est assez limité, mais pour quelques semaines cette solution devrais suffire.
    Je ne peut pas augmenter indéfiniment la hauteur de ma form, je suis limité par la configuration de l'écran.
    C'est une solution de dépannage. Si vous avez des idées, je suis preneur.

    Mon tableau contient 3 lignes :
    - La première contient un autre tableau d'une seule ligne et de deux colonnes. La case de gauche contient une picture box et celle de droite un label.
    - La deuxième contient une grille. (Celle-ci s'étant avec la fenêtre)
    - La troisième contient un tableau d'une ligne et trois colonnes contenant chacun un label.

    La première ligne sert d'en-tête et la dernière de pied de page au document (et pas à chaque page, cela peut un jour évoluer)

    J'arrive à imprimer la grille seule correctement (voir un post ici même de ma part sur le sujet), j'arrive à imprimer mon tableau correctement (cf : ci-dessus) mais je n'arrive pas à imprimer la grille correctement (sans les scrollbars / avec toutes les lignes) si elles ne sont pas visible à l'écran.

    Merci pour votre aide tous sa ^^

Discussions similaires

  1. [VB.NET]Comment Imprimer une form
    Par bernard06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/10/2011, 17h43
  2. [CR] Comment imprimer dans le bon ordre
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 18/05/2004, 11h11
  3. [Impression] Comment imprimer un .txt?
    Par Grosgrognon dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 27/04/2004, 13h19
  4. Comment imprimer des tabulations ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 11h30
  5. Comment imprimer le contenu d'un TStringGrid
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo