Précédent   Forum du club des développeurs et IT Pro > Dotnet > Langages > VB.NET
VB.NET Forum d'entraide sur la programmation Visual Basic .NET. Avant de poster -> FAQ VB.NET, Articles VB.NET, Sources VB.NET
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/12/2012, 18h38   #1
BernardBouree
Invité de passage
 
Inscription : octobre 2004
Messages : 39
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 39
Points : 1
Points : 1
Par défaut Impression d'une TextBox

Bonjour

J'essaye d'imprimer le contenu d'une TextBox à l'aide des fonctions suivantes:
Code :
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
 Private Sub MenuImprimerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuImprimer.Click
        _sStringToPrint = TxtBoxTexteFichierGed.Text
        With PrintDialog
            .Document = PrintDocument
            .AllowSomePages = True
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                PrintDocument.Print()
            End If
        End With
    End Sub
 
    Private Sub PrintDocumentPrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
        Dim numChars As Integer
        Dim numLines As Integer
        Dim stringForPage As String
        Dim strFormat As New StringFormat()
        Dim PrintFont As Font
        Static numPage As Integer = 0
        Dim numPremièrePage As Integer = 0
        Dim numDernièrePage As Integer = 0
        PrintFont = TxtBoxTexteFichierGed.Font
        Dim rectDraw As New RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height)
        Dim sizeMeasure As New SizeF(e.MarginBounds.Width, e.MarginBounds.Height - PrintFont.GetHeight(e.Graphics))
        strFormat.Trimming = StringTrimming.Word
        e.Graphics.MeasureString(_sStringToPrint, PrintFont, sizeMeasure, strFormat, numChars, numLines)
        stringForPage = _sStringToPrint.Substring(0, numChars)
        'Si l'option "Toutes les pages" est cochée on fixe NumDernièrePage à 10000
        'sinon on définit le range
 
        If e.PageSettings.PrinterSettings.PrintRange <> PrintRange.AllPages Then
            numPremièrePage = e.PageSettings.PrinterSettings.FromPage
            numDernièrePage = e.PageSettings.PrinterSettings.ToPage
        Else
            numDernièrePage = 10000
        End If
        numPage += 1
        If numPage >= numPremièrePage And numPage <= numDernièrePage Then
            e.Graphics.DrawString(stringForPage, PrintFont, Brushes.Black, rectDraw, strFormat)
        End If
        If numChars < _sStringToPrint.Length Then
                _sStringToPrint = _sStringToPrint.Substring(numChars)
            e.HasMorePages = True
        Else
            e.HasMorePages = False
        End If
        If numPage > numDernièrePage Then e.HasMorePages = False
    End Sub
J'utilise la boite de dialogue PrintDialog pour définir une impression de toutes les pages ou seulement d'une partie.
Dans la fonction PrintDocumentPrintPage j'ai du code qui me permet de sélectionner les pages à imprimer en fonction du choix fait dans la boite de dialogue.
Mais pour les pages qui ne sont pas à imprimer, j'obtiens une page blanche qui sort de l'imprimante.
Comment l'éviter?
Je n'ai pas compris quelle était la ligne de code qui déclenchait l'impression de la page. Je pensais que c'était DrawString mais cela ne semble pas le cas.

Merci de votre aide.

Bernard
BernardBouree est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 17h25   #2
BernardBouree
Invité de passage
 
Inscription : octobre 2004
Messages : 39
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 39
Points : 1
Points : 1
Bonjour

N'ayant pas reçu de réponse j'imagine que ma question est mal posée!
J'ai fait quelques progrès dans la compréhension dans la classe system.drawing.printing et j'ai une question plus simple

Dans la documentation et les exemples donnés l'impression est déclenchée par une fonction du type indiquée avec la fonction Drawstring qui imprime le texte.


Code :
1
2
3
4
5
Private Sub PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
...
e.Graphics.DrawString(...)
..
End Sub
J'ai mis du code me permettant de choisir les pages à imprimer tel que définit dans une boite de dialogue.

Si je demande à ce que toutes les pages soit imprimées, tout va bien, mais si je demande la page 5 à 10 par exemple, il me sort 4 pages blanches .
Il me semble donc que l'impression est déclenchée dès que l'on entre dans la fonction Printpage même si la fonction DrawString n'est pas appellée.

Donc comment faire pour définir les pages à imprimer sans avoir à imprimer un lot de pages blanches.

Merci

Bernard
BernardBouree est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 17h43   #3
Rainui
Membre expérimenté
 
Homme Yves TRICHAUD
Technicien bio médical
Inscription : décembre 2012
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Yves TRICHAUD
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien bio médical
Secteur : Santé

Informations forums :
Inscription : décembre 2012
Messages : 229
Points : 563
Points : 563
Bonjour,

Avez vous essayé en mode Pas par Pas voir si la Sub PrintDocumentPrintPage est exécutée?

Je ne sais pas si ça peut vous aider mais je suis tombé sur un exemple d'impression sur Msdn : PrintDocument.Print()
__________________
est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et
Rainui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 18h28   #4
BernardBouree
Invité de passage
 
Inscription : octobre 2004
Messages : 39
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 39
Points : 1
Points : 1
Bonjour

Oui bien sûr j'ai essayé le pas à pas et c'est là que j'ai vu que l'impression n'était déclenchée qu'au sortir de la fonction PrintPage.
Merci pour votre exemple mais il ne permet pas de définir les pages à imprimer.

Et si on le modifie pour sauter certaines pages on obtient une page blanche pour ces pages.

Bernard
BernardBouree est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 19h34   #5
Rainui
Membre expérimenté
 
Homme Yves TRICHAUD
Technicien bio médical
Inscription : décembre 2012
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Yves TRICHAUD
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien bio médical
Secteur : Santé

Informations forums :
Inscription : décembre 2012
Messages : 229
Points : 563
Points : 563
Bonsoir,

Je n'ai pas de réponse précise à vous apporter, ne m'étant pas encore intéressé de prêt à l'impression (je passe par des modèles Word quand j'en ai besoin).

Cependant, je suis tombé sur un vieux tutoriel ou vous pourrez certainement trouver des réponses : Imprimer avec VB.Net de J-M Rabilloud

Je donne ma langue au chat et laisse des personnes plus calée répondre.

Désolé de ne pas pouvoir vous aider d'avantage.
__________________
est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et
Rainui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 19h51   #6
BernardBouree
Invité de passage
 
Inscription : octobre 2004
Messages : 39
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 39
Points : 1
Points : 1
Bonjour

Merci pour le document.
Une rapide lecture me fait penser que je vais peut être y trouver mon bonheur!
Cordialement

Bernard
BernardBouree est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 20h01   #7
Rainui
Membre expérimenté
 
Homme Yves TRICHAUD
Technicien bio médical
Inscription : décembre 2012
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Yves TRICHAUD
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien bio médical
Secteur : Santé

Informations forums :
Inscription : décembre 2012
Messages : 229
Points : 563
Points : 563
Je suis têtu et je pense savoir pourquoi votre code ne fonctionne pas.

Dans le court de P.Lasserre, il est écrit que dans le cas de l'utilisation de la classe PrintDocument (et non le composant PrintDocument que l'on dépose sur la Form), c'est à nous de déterminer le PrintPage qui va avec.

J'en déduis donc qu'il faut faire comme dans l'exemple msdn CAD :

Code :
1
2
3
4
Dim pd As New PrintDocument()
                AddHandler pd.PrintPage, AddressOf pd_PrintPage
                ' Print the document.
                pd.Print()
Où "pd.PrintPage" est l'évènement de votre PrintDocument et "pd_PrintPage" la procédure de mise en forme de votre document.
__________________
est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et
Rainui est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/01/2013, 18h53   #8
BernardBouree
Invité de passage
 
Inscription : octobre 2004
Messages : 39
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 39
Points : 1
Points : 1
Bonsoir

Donc le document de JM Rabilloud (qui date un peu) et pour lequel je n'ai pas trouvé de mise à jour sur son blog, est en effet très complet mais il ne traite pas du cas ou on veut sélectionner certaines pages à imprimer.

Je suppose que la fonction PrintPage est déclenchée dès que Print est appelée et qu'il faut gérer le pages via d'autre évènements, sans doute OnSartPrint du PrintController mais je n'arrive pas à trouver d'exemple.

Merci pour l'aide.

Bernard
BernardBouree est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h18.


 
 
 
 
Partenaires

Hébergement Web