1. #1
    Membre du Club
    Inscrit en
    février 2003
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 190
    Points : 64
    Points
    64

    Par défaut Imprimer une form plus grande que l'écran

    Bonjour à tous,
    J'aimerai permettre aux utilisateurs de mon logiciel d'imprimer une fiche de synthèse.
    Pour ce faire, j'utilise le code suivant :
    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
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Me.ControlBox = False
            Button1.Visible = False
            Me.AutoScroll = False
            Me.Height = Label_Remb2.Bottom + 20
            Me.Width = TextBox_DescriProjet.Left + TextBox_DescriProjet.Width + 25
            Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
     
            Dim PageSetupDialog As New PageSetupDialog()
            PageSetupDialog.Document = PrintDocument1
            PageSetupDialog.PageSettings.Landscape = False
            Me.PrintDocument1.Print()
     
     
            Button1.Visible = True
            Me.ControlBox = True
            Me.AutoScroll = True
            Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable
        End Sub
     
     
        Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles 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
    Cependant, la page imprimée s'arrête à la limite de la partie visible de la form (limitée par la taille de l'écran), bien qu'il y ait une grande partie blanche en bas de la page.
    Je ne parviens pas à imprimer les 2 lignes manquantes.

    Quelqu'un aurait une idée pour solutionner mon problème ?

    Merci d'avance.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    avril 2013
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2013
    Messages : 265
    Points : 0
    Points
    0

    Par défaut

    Bonjour,

    j'avais fait un apercu comme ceci avant imprimer :
    Nom : Sans titre.jpg
Affichages : 85
Taille : 156,4 Ko

    voici le code pour un apercu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            PrintPreviewDialog1.Document = PrintDocument1
            CType(PrintPreviewDialog1, Form).WindowState = FormWindowState.Normal
            PrintPreviewDialog1.Size = New System.Drawing.Size(900, 950)
            PrintPreviewDialog1.PrintPreviewControl.AutoZoom = False
            PrintPreviewDialog1.PrintPreviewControl.Zoom = 0.75
            PrintPreviewDialog1.ShowDialog()
        End Sub
     
        Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim stringFormat As New StringFormat()
            stringFormat.FormatFlags = StringFormatFlags.DisplayFormatControl
            e.Graphics.DrawString(RichTextBox1.Text, New Font("Microsoft Sans Serif", 8, FontStyle.Regular), Brushes.Black, New Rectangle(20, 20, e.Graphics.VisibleClipBounds.Width - 40, e.Graphics.VisibleClipBounds.Height - 40), stringFormat)
        End Sub
    pour imprimer la page :
    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
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            Dim prn As New Printing.PrintDocument
            Dim pageSettings As System.Drawing.Printing.PageSettings = New System.Drawing.Printing.PageSettings
     
            pageSettings.Landscape = True
            pageSettings.PaperSize = New System.Drawing.Printing.PaperSize("A4", 210, 297)
            pageSettings.Margins.Top = 0
            pageSettings.Margins.Bottom = 0
            pageSettings.Margins.Left = 0
            pageSettings.Margins.Right = 0
     
            prn.DefaultPageSettings = pageSettings
            prn.PrinterSettings.PrinterName.ToString()
     
            AddHandler prn.PrintPage, AddressOf Me.PrintDocument1_PrintPage
            prn.Print()
            RemoveHandler prn.PrintPage, AddressOf Me.PrintDocument1_PrintPage
        End Sub
    j’espère ça aidera à ton probléme,

    Cordialement,

  3. #3
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 901
    Points : 3 267
    Points
    3 267

    Par défaut

    bonjour

    Il faut virer ces lignes de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Me.AutoScroll = False
            Me.Height = Label_Remb2.Bottom + 20
            Me.Width = TextBox_DescriProjet.Left + TextBox_DescriProjet.Width + 25
    et les remplacer par ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
            Me.Height +=20
            Me.Width  += 25
     
    Me.AutoSize = True
    bon code...

  4. #4
    Membre du Club
    Inscrit en
    février 2003
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 190
    Points : 64
    Points
    64

    Par défaut

    Bonjour à tous les deux, et merci de vous pencher sur mon problème.

    Les corrections proposées par MABROUKI laissent mon problème inchangé.

    Le code que me propose hacker59 est intéressant, mais ne me permet pas d'obtenir le résultat escompté, notamment avec la ligne ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Graphics.DrawString(RichTextBox1.Text, New Font("Microsoft Sans Serif", 8, FontStyle.Regular), Brushes.Black, New Rectangle(20, 20, e.Graphics.VisibleClipBounds.Width - 40, e.Graphics.VisibleClipBounds.Height - 40), stringFormat)
    je ne cherche pas à imprimer une richtextbox, mais bien la form entière ...
    J'ai essayé d'utiliser le code ci-dessous, mais il ne fonctionne pas (Me est incompatible avec DrawString)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Graphics.DrawString(Me, New Font("Microsoft Sans Serif", 8, FontStyle.Regular), Brushes.Black, New Rectangle(20, 20, e.Graphics.VisibleClipBounds.Width - 40, e.Graphics.VisibleClipBounds.Height - 40), stringFormat)
    Comment pourrais-je l'adapté pour imprimer la form complète ?

    Merci d'avance pour vos réponses

  5. #5
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 901
    Points : 3 267
    Points
    3 267

    Par défaut

    bonjour

    Probablement que ton Form dont j'ignore les dimensions en pixels ,mais converties "automatiche" en millimètres dépassent le format choisi (en mm) de page...

    Dans ce cas Graphics.PageScale est ton ami
    code exemple .vb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ' Change the page scale.  
        e.Graphics.PageScale = 0.90F
    bon code...

  6. #6
    Membre du Club
    Inscrit en
    février 2003
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 190
    Points : 64
    Points
    64

    Par défaut

    Bonjour à tous,
    Désolé pour cette réponse tardive.
    Vos propositions de correction n'y changent rien : il n'y à que la partie de la form visible à l'écran qui est imprimée.
    Par exemple, mon écran à une résolution de 1024 x768, tout ce qui est au delà de 768 n'est pas imprimé bien que ma form soit pourvue d'un autoscroll ...
    Quelqu'un aurait d'autre piste de solution ?
    Merci d'avance

  7. #7
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 901
    Points : 3 267
    Points
    3 267

    Par défaut

    bonjour
    La ârtie rendue en pixel est limitée à la partie visible de l'ecran,pratiquement aux dimensions de l'ecran...
    Les paries qui dépassent les limites d'ecran ne sont pas rendues pour les winforms simplement...
    Quand on un form scrollable par exemple,le système ne dessine que la partie cliente du form visible ,neamoins c'est suffisant pour donner "l'illusion d'un bitmap defilant"...
    La seule solution ,quoique imparfaite c'est de rescaler "adéquatement" les dimensions du form et des controls enfants avec Form.Scale(sizeF)
    L'autre solution c'est de s'acheter un big moniteur ultra-HD comme mon televiseur mais ce qui m'intrigue c'est l'imprimante qui devra etre balaise pour imprimer du A2 et l'œil jupiterien qui valire 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
     
     Private s As New Size(1200, 800)
    Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
             Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
             Me.Size = New Size(s.Width, s.Height)
     
            'capital
             Me.Scale(New SizeF(0.7, 0.7))
            Me.Text = Bounds.ToString
        End Sub
           Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
            memoryImage = New Bitmap(Me.Bounds.Width, Me.Bounds.Height)
            Me.DrawToBitmap(memoryImage, New Rectangle(0, 0, Me.Bounds.Width, Me.Bounds.Height))
     
     
            e.Graphics.DrawImage(memoryImage, rect)
        End Sub
    bon code...

  8. #8
    Membre du Club
    Inscrit en
    février 2003
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 190
    Points : 64
    Points
    64

    Par défaut

    Merci pour ton aide, j'essaye ça dès que possible

  9. #9
    Membre du Club
    Inscrit en
    février 2003
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 190
    Points : 64
    Points
    64

    Par défaut

    La solution proposée par MABROUKI ne résout malheureusement pas mon problème, mais créé un pèle mêle pas possible dans l'agencement de ma form .

    J'ai donc choisi de réorganiser l'agencement des objets pour que tout tienne sur un seul écran, sans scroll.
    Malheureusement ce n'est qu'une adaptation et je n'ai pas de véritable solution au sens où je t'entends et ma question ne pourra donc pas véritablement aider un autre utilisateur qui aurait le même problème que moi ...

    Quoi qu'il en soit, je remercie tout ceux qui se sont penchés sur ma question.

Discussions similaires

  1. Afficher un dessin plus grand que l'écran
    Par Flow_75 dans le forum Android
    Réponses: 2
    Dernier message: 17/08/2011, 19h15
  2. Div plus grand que l'écran
    Par tabouet dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 25/03/2009, 21h56
  3. Barre de défilement dans une figure plus grande que l'écran
    Par camillechambon dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 23/04/2007, 10h40
  4. Réponses: 4
    Dernier message: 06/01/2006, 18h41
  5. [JFrame] Création d'une fenetre plus grande que l'ecran
    Par thetoctoc dans le forum Fenêtres/Dialogues
    Réponses: 2
    Dernier message: 23/09/2004, 11h05

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