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

VB.NET Discussion :

Impression, comment faire un saut de page ?


Sujet :

VB.NET

  1. #1
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Points : 132
    Points
    132
    Par défaut Impression, comment faire un saut de page ?
    Bonjour,

    J'arrive à imprimer (papier) mais j'ai deux problèmes :

    -1- Comment effectuer un sauf de page (ascii 10)
    -2- Comment in fine décharger l'objet graphique ?

    Voici mon code :

    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
    Option Explicit On
    Public Class Form1
    	Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    		ListBox1.Items.Clear() ' chargement
    		ListBox1.Items.Add("Maître Corbeau sur un arbre perché")
    		ListBox1.Items.Add("Tenait don son bec un fromage")
    		ListBox1.Items.Add("Maître Renard par l'odeur alléchée")
    		ListBox1.Items.Add("Lui tint à peu près ce langage")
    		ListBox1.Items.Add("Eh bonjour Monsieur du Corbeau")
    		ListBox1.Items.Add("Que vous êtes jolie, que vous me semblez beau")
    	End Sub
    
    	Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    		Dim i As Integer
    		Dim ligne As String = ""
    		For i = 0 To 2 'ListBox1.Items.Count - 1
    			ligne = ligne & ListBox1.Items(i) & vbCrLf
    		Next i
    		'
    		' SAUT DE PAGE ?
    		'
    		For i = 3 To ListBox1.Items.Count - 1
    			ligne = ligne & ListBox1.Items(i) & vbCrLf
    		Next i
    		e.Graphics.DrawString(ligne, New Font("Courier New", 12, FontStyle.Regular), Brushes.Black, 10, 10)
    	End Sub
    
    	Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    		' bouton : impression
    		PrintDocument1.Print()
    		PrintDocument1.Dispose()
                 ' DECHARGEMENT DE E = Graphics.DrawString ???
    	End Sub
    Merci beaucoup, cordialement.
    .
    .
    Cordialement.

    Joe.
    .
    .

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut saut de page dans un listbox,jean de lafontaine
    bonjour
    pour imprimer et faire un saut de page dans un listbox ,d'apres Jean de LaFontaine Fabuliste et poete du 17eme siecle ,heritier d'Esope le grec ,Ibn Muqquaffa l'arabe et de l'Indien Bidpai.....
    code:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    Option Explicit On
    Public Class Form1
     
        Dim totalPages As Integer = 3
        Dim numPage As Integer = 1
        '2 variables pour "decouper" le ListBox en 2 morceaux 
        'car tu en as decide ainsi mais tu peux le decouper autrement 
        Dim str1 As String = ""
        Dim str2 As String = ""
        Dim str3 As String = ""
        Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ListBox1.Items.Clear() ' chargement
            ListBox1.Items.Add("Maître Corbeau sur un arbre perché")
            ListBox1.Items.Add("Tenait don son bec un fromage")
            ListBox1.Items.Add("Maître Renard par l'odeur alléchée")
     
            ListBox1.Items.Add("Lui tint à peu près ce langage")
            ListBox1.Items.Add("Eh bonjour Monsieur du Corbeau")
            ListBox1.Items.Add("Que vous êtes joli, que vous me semblez beau")
     
            ListBox1.Items.Add("Sans mentir, si votre ramage se rapporte à votre plumage,")
            ListBox1.Items.Add("Vous êtes le phénix des hôtes de ces bois")
            ListBox1.Items.Add("A ces mots le corbeau ne se sent pas de joie")
            ListBox1.Items.Add("Et pour montrer sa belle voix")
            ListBox1.Items.Add("Il ouvre un large bec laisse tomber sa proie")
            ListBox1.Items.Add("Le renard s'en saisit et dit: Mon bon Monsieur, Apprenez que tout flatteur")
            ListBox1.Items.Add("Vit aux dépens de celui qui l'écoute")
     
        End Sub
        ' Quand (HasMorePages=True) l'ogre PrintPage se presente ici 
        ' on lui donne en le trompant le plat approprie suivant numero de page 
        Private Function obtientTexte(ByVal texteCourant As String, ByVal objPage As Integer) As String
            If objPage = 1 Then
                For i As Integer = 0 To 2
                    texteCourant = texteCourant + Me.ListBox1.Items(i) & vbCrLf
                Next
            ElseIf objPage = 2 Then
                For i As Integer = 3 To 6
                    texteCourant = texteCourant + Me.ListBox1.Items(i) & vbCrLf
                Next
            ElseIf objPage = 3 Then
                For i As Integer = 7 To Me.ListBox1.Items.Count - 1
                    texteCourant = texteCourant + Me.ListBox1.Items(i) & vbCrLf
                Next
            End If
            Return texteCourant
        End Function
     
        Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
            Dim xPosPage As Single = e.MarginBounds.Left
            Dim yPosPage As Single = e.MarginBounds.Top
            Dim TexteAimprimer As String = ""
            TexteAimprimer = obtientTexte(TexteAimprimer, numPage)
            e.Graphics.DrawString(TexteAimprimer, Me.ListBox1.Font, Brushes.Black, xPosPage, yPosPage)
     
            numPage = numPage + 1
            ' si HasMorePages=true l'evenement est redeclenche à chaque fois(boucle)
            ' et imprime ce qu'il trouve sur son passage
            ' Test pour derniere page
            e.HasMorePages = (numPage <= totalPages)
        End Sub
     
        Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ' bouton : impression
            PrintDocument1.Print()
            'PrintDocument1.Dispose()
     
        End Sub
     
    End Class
    bon code.............

  3. #3
    Inactif
    Homme Profil pro
    Auteur logiciels et romans
    Inscrit en
    Février 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auteur logiciels et romans
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Février 2009
    Messages : 203
    Points : 132
    Points
    132
    Par défaut Réponse à Mabrouki
    Citation Envoyé par MABROUKI Voir le message
    bonjour
    pour imprimer et faire un saut de page dans un listbox ,d'apres Jean de LaFontaine Fabuliste et poete du 17eme siecle ,heritier d'Esope le grec ,Ibn Muqquaffa l'arabe et de l'Indien Bidpai.....

    Bonjour Mabrouki,

    D'abord, merci beaucoup de ta réponse, toutefois je suis un peu perdu car ne sachant pas trop gérer le problème (je viens de vb6, via B (qb)), tu as changé avec ton talent habituel ça va de soi, l'ordre des choses, enfin, je veux dire que tu n'as pas indiqué le code (très performant au demeurant), donc tu n'as pas indiqué le code selon le schéma de ma question, ce qui grandement me perturbe, car j'ai l'impression qu'il y a autant de façon d'imprimer que de développeur, ce qui est en soi inquiétant.

    Heu, en précision, ce n'est pas une impression depuis une listeBox dans l'absolu, elle est là pour servir de support au texte, mais ça aurait pu tout aussi bien être un texteBox, peu importe en fait.

    Alors puis-je oser te demander juste une petite adaptation de ton code afin que mieux je le comprenne, notamment en utilisant pas de fonction qui sont de nature à m'embrouiller mon faible cerveau, car je viens du Basic, pur, où les fonctions n'existent pas, certes ils les ont rajouté dans le Visual basic, mais je ne m'en serts pas puisqu'elles n'ont pas d'utilisation indispensable.

    En fait, je cherche à placer un vrai saut de page vbff (ff), chr(12)... (peut être avec 13+10 ?
    Evidement j'ai déjà tenté l'opération, l'imprimante la digère mais ne s'en émeut pas davantage.

    Car là, ton code est remarquable, mais on jongle entre trois procédures et fonctions pour une simple impression de 2, 3 pages de texte même pas proportionné, ça fait quand même très compliqué pour si peu, par rapport au VB6, ainsi, comme susdit, si tu savais comment passer un véritable saut de page dans le texte, ce serait davantage conforme à ce que je connais et recherche, j'ai déjà vu ça dans la doc, mais je n'ai pas réussi à l'utiliser, de même si deux procédure, voire une seule suffisait, ça ne pourraît pour moi en être que mieux, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub imp() 
      marges, police, taille...
      dim bloc
      bloc = débit du texte
      bloc=bloc & saut de page
      bloc = bloc & débit du texte
      envoi à l'objet d'impression
      libération de l'objet
    end Sub
    C'est d'une complexité affolante ce vbNet par rapport au vb6, si c'est ça le progrès moi je vais devenir passéiste !

    Voir en passant directement par le code car il n'y a peut être pas besoin de l'objet graphique...

    Saurais-tu me faire ça ?

    En te remerciant encore, très cordialement.
    .
    .
    Cordialement.

    Joe.
    .
    .

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut sans function ,document
    bonjour ehjoe

    Effectivement la version que je t'ai donnee est plus elaboree car elle simule un vrai document (au lieu d'un listbox ca pourrait un textbox,un richtextbox qui contient une quantite de texte importante pour lesquels on a besoin d'un fonction separee pour formatter le document).
    Maintenant dans le cas du listbox voila une fonction simple avec une simple variable globale numeroItem.
    Mais attention avec VB.NET et GDI tu n'es pas dispense de gerer les lignes et les interlignes.
    code revu sans sub:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    'Version revisee pour eliminer la "function"
    'On utilise simplement une variable globale "numeroItem"
    '1/Initialise à zero(index de depart du ListBox part à zero)
    'Quand on lance l'ogre Print il trouve 0 et il itere sur les items
    '2/Quand numeroItem = 2 on lui indique fin de page 
    'et on met numeroItem=3   pour qu'il demarre la nouvelle boucle à 3
    'Comme l'ogre Print se presente à nouveau dans sa boucle infernale 
    'il trouve numeroItem =3 et ainsi de suite
    '3/Quand il atteint ListBox.Count-1 il sort du while
    'On lui presente un caillou brulant "hasmorepages=false"  
    'il s'etrangle et quitte sa boucle infernale 
    Public Class Form3
        Dim numeroItem As Integer = 0
        Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            ListBox1.Items.Clear() ' chargement
            ListBox1.Items.Add("Maître Corbeau sur un arbre perché")
            ListBox1.Items.Add("Tenait don son bec un fromage")
            ListBox1.Items.Add("Maître Renard par l'odeur alléchée")
     
            ListBox1.Items.Add("Lui tint à peu près ce langage")
            ListBox1.Items.Add("Eh bonjour Monsieur du Corbeau")
            ListBox1.Items.Add("Que vous êtes joli, que vous me semblez beau")
     
            ListBox1.Items.Add("Sans mentir, si votre ramage se rapporte à votre plumage,")
            ListBox1.Items.Add("Vous êtes le phénix des hôtes de ces bois")
            ListBox1.Items.Add("A ces mots le corbeau ne se sent pas de joie")
            ListBox1.Items.Add("Et pour montrer sa belle voix")
            ListBox1.Items.Add("Il ouvre un large bec laisse tomber sa proie")
            ListBox1.Items.Add("Le renard s'en saisit et dit: Mon bon Monsieur, Apprenez que tout flatteur")
            ListBox1.Items.Add("Vit aux dépens de celui qui l'écoute")
        End Sub
        Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     
            Dim maFonte As New Font("Times New Roman", 12, FontStyle.Regular)
            'Interligne necessaire en GDI 
            Dim hauteurLigne = maFonte.GetHeight
     
            'coord X du texte
            Dim xPos As Integer = e.MarginBounds.Left
            'coord Y du texte
            Dim yPos As Integer = e.MarginBounds.Top
     
            Dim totalItem As Integer = Me.ListBox1.Items.Count
            ' Itere sur les items du ListBox.
            Dim ligne As String = ""
            Do While numeroItem < totalItem - 1
                ligne = Me.ListBox1.Items(numeroItem)
                e.Graphics.DrawString(ligne, Me.ListBox1.Font, _
                                      Brushes.Black, xPos, yPos)
     
                ' demande un saut de page si .....
                If numeroItem = 2 Then
                    e.HasMorePages = True
                    numeroItem = 3
                    Return
                ElseIf numeroItem = 6 Then
                    e.HasMorePages = True
                    numeroItem = 7
                    Return
                End If
                ' ligne suivante et item suivant 
                yPos += hauteurLigne
                numeroItem += 1
            Loop
            ' impression termine.
            e.HasMorePages = False
            numeroItem = 0
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'Me.PrintDocument1.Print()
            Me.PrintPreviewControl1.Zoom = 1.0
            'nombre de pages d'apercu(pas necessairement egale à celle du docuument reel)
            Me.PrintPreviewControl1.Rows = 4
            Me.PrintPreviewControl1.Document = Me.PrintDocument1
        End Sub
     
    End Class
    j'ai mis un PrintPreviewControl1 juste pour tester.
    bonne soiree....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment faire la mise en page de l impression directe sur un port com
    Par kameleon80 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 19/04/2013, 09h06
  2. Comment définir le "saut de page" de l'impression
    Par just1980 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/04/2008, 13h19
  3. Comment effectuer un saut de page si un table est coupé au cours d'une impression ?
    Par jean-pierre96 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/05/2007, 13h33
  4. [Impression]Comment faire ?
    Par Chance666 dans le forum Windows
    Réponses: 17
    Dernier message: 03/12/2004, 10h42
  5. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31

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