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 :

Choix de l'imprimante depuis l'aperçu avant impression [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Juriste
    Inscrit en
    Mars 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Juriste
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2004
    Messages : 49
    Points : 40
    Points
    40
    Par défaut Choix de l'imprimante depuis l'aperçu avant impression
    Bonjour à tous et à toutes.

    Exposé

    J'avais créée un formulaire dédié à être imprimé. Mais l'impression d'un formulaire étant de trop mauvaise qualité, j'ai été contraint de créer une routine d'impression.
    Seulement le résultat à l'impression n'est pas absolument identique à l'apparence de mon formulaire.

    Alors j'ai décidé de ne plus afficher mon formulaire et de passer directement par un aperçu avant impression du résultat de ma routine d'impression.


    Mon problème:

    Je ne parviens pas à lancer à partir de l'aperçu avant impression (de l'icone imprimante de cet aperçu) le choix d'une imprimante (le printdalog)

    Je n'ai pas de souci pour faire un aperçu avant impression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ButtonPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrint.Click
            Dim ppd1 As New PrintPreviewDialog
            pd.DocumentName = "Fiche de frais"
            AddHandler pd.PrintPage, AddressOf Me.Pd_PrintPage
            Dim ps2 As New PageSettings
            ps2.Landscape = False
            pd.DefaultPageSettings = ps2
            ppd1.Document = pd
            ppd1.WindowState = FormWindowState.Maximized
            If ppd1.ShowDialog = Windows.Forms.DialogResult.OK Then
            ppd1.Document.Print()
            End If
        End Sub


    ou de lancer un choix d'imprimante à partir d'un bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ButtonPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrint.Click
            Dim ppd2 As New PrintDialog
            pd.DocumentName = "Fiche de frais"
            AddHandler pd.PrintPage, AddressOf Me.Pd_PrintPage
            ppd2.Document = pd
            If ppd2.ShowDialog = Windows.Forms.DialogResult.OK Then
            ppd2.Document.Print()
            End If
        End Sub


    Quel que soit ce que je met sous la conditon "If ppd1.ShowDialog = Windows.Forms.DialogResult.OK Then" c'est inlassablement l'impression sur l'imprimante par défaut qui se lance.


    Ma question :
    Existe-t-il une solution pour lancer printdalog à partir de la fenêtre printpreviewdialog ?

    Merci

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Voici tout le code dont tu as besoin. Quand une imprimte est choisie dans le PrintDialog elle est l'imprimante par défaut jusqu'à la prochaine fois. Ton code n'a pas à "connaître explicitement" l'imprimante, PrintDialog a fait le nécessaire. Après cela, le PrintPreviewDialog envrerra l'impression là où tu as choisi.
    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
     
     
        Private MaPrintPreviewDialog As PrintPreviewDialog
        Private MaPrintDialog As PrintDialog
        Private WithEvents MonPrintDocument As System.Drawing.Printing.PrintDocument
     
     
            MaPrintPreviewDialog = New PrintPreviewDialog
            MaPrintDialog = New PrintDialog
            MonPrintDocument = New System.Drawing.Printing.PrintDocument
            Dim Resultado As DialogResult
            MaPrintDialog.Document = MonPrintDocument  ' Les 3 lignes suivantes séléctionnent l'imprimante
            Resultado = MaPrintDialog.ShowDialog()
            If Resultado = Windows.Forms.DialogResult.OK Then
                MaPrintPreviewDialog.Document = MonPrintDocument
                MonPrintDocument.DocumentName = NombreArchivoParaImpresora    '(=NomFichierPourImprimante)
            End If
    Ce code est extrait d'une classe qui regroupe ce qu'il faut pour imprimer un fichier TXT (cela vient du fait que je préfère envoyer tout ce qu'il faut imprimer dans un fichier TXT, facile à écrire, et de le relire dans le ..._PrintPage où il faut bien faire la mise en page ). Voici le code de cette classe :

    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
    Public Class MesImpressions
     
        Friend NombreArchivoParaImpresora As String    ' Pour le nom et chemin du fichier TXT (=NomFichierPourImprimante)
        Private MaPrintPreviewDialog As PrintPreviewDialog
        Private MaPrintDialog As PrintDialog
        Private WithEvents MonPrintDocument As System.Drawing.Printing.PrintDocument
        Private MonDoc As System.IO.StreamReader   ' Si impression d'un fichier TXT
     
        Private Sub MonPrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles MonPrintDocument.PrintPage
            ' ... ... ...  selon le fromatage souhaité
        End Sub
     
        Private Sub MesImpressions_Closed(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Closed
            MaPrintDialog.Dispose()
            MaPrintPreviewDialog.Dispose()
            MonDoc.Close()
        End Sub
     
        Private Sub MesImpressions_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
     
            MaPrintPreviewDialog = New PrintPreviewDialog
            MaPrintDialog = New PrintDialog
            MonPrintDocument = New System.Drawing.Printing.PrintDocument
            Dim Resultado As DialogResult
            MaPrintDialog.Document = MonPrintDocument  ' Les 3 lignes suivantes séléctionnent l'imprimante
            Resultado = MaPrintDialog.ShowDialog()
            If Resultado = Windows.Forms.DialogResult.OK Then
                MaPrintPreviewDialog.Document = MonPrintDocument
                MonPrintDocument.DocumentName = NombreArchivoParaImpresora (=NomFichierPourImprimante)
                MonDoc = New System.IO.StreamReader(MonPrintDocument.DocumentName)  ' Dans cet exemple, on imprime un doc TXT
                MaPrintPreviewDialog.Dock = DockStyle.Fill
                Resultado = MaPrintPreviewDialog.ShowDialog()
                If Resultado = Windows.Forms.DialogResult.OK Then
                    MonDoc.Close()
                    MonDoc.Dispose()
                Else
                    Me.Close()
                End If
            End If
        End Sub
    End Class
    J'espère que ceci t'aidera ...

  3. #3
    Membre du Club
    Homme Profil pro
    Juriste
    Inscrit en
    Mars 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Juriste
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2004
    Messages : 49
    Points : 40
    Points
    40
    Par défaut
    Merci

    Je n'y entend pas grand chose (tout cela est nouveau pour moi) mais outre le fait que le code est dédié à une impression de fichier txt (dont j'ignore tout), il ne me semble pas permettre la sélection d'imprimante à partir de l'aperçu [edit="ah ben non"]mais au contraire, semble lancer l'aperçu après le choix de l'imprimante.[/edit]

    Je fais probablement erreur mais en tout état de cause je suis bien incapacable d'adapter à mes besoins le code fourni.

    Merci encore

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    mais au contraire, semble lancer l'aperçu après le choix de l'imprimante
    Tu as raison, je ne pense pas qu'il soit possible de faire autrement. Saches que le choix de l'imprimante ne change rien à ce qui est montré dans l'aperçu.

    Teste donc ce code ...

    Je ne viendrai plus sur le forum aujourd'hui, demain sûrement.

    Bonne soirée,

  5. #5
    Membre du Club
    Homme Profil pro
    Juriste
    Inscrit en
    Mars 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Juriste
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2004
    Messages : 49
    Points : 40
    Points
    40
    Par défaut
    Bonjour et merci pour votre intérêt

    J'ai trouvé une solution sur le net .

    Il faut créer une class
    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
    Imports System.Drawing.Printing
    Public Class PrintPreviewDialogSelectPrinter
        Inherits PrintPreviewDialog
     
        Private Sub myPrintPreview_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
            'Get the toolstrip from the base control
            Dim ts As ToolStrip = CType(Me.Controls(1), ToolStrip)
            'Get the print button from the toolstrip
            Dim printItem As ToolStripItem = ts.Items("printToolStripButton")
     
            'Add a new button 
            With printItem
     
                Dim myPrintItem As ToolStripItem
                myPrintItem = ts.Items.Add(.Text, .Image, New EventHandler(AddressOf MyPrintItemClicked))
     
                myPrintItem.DisplayStyle = ToolStripItemDisplayStyle.Image
                'Relocate the item to the beginning of the toolstrip
                ts.Items.Insert(0, myPrintItem)
            End With
     
            'Remove the orginal button
            ts.Items.Remove(printItem)
        End Sub
        Private Sub MyPrintItemClicked(ByVal sender As Object, ByVal e As EventArgs)
            Dim dlgPrint As New PrintDialog
            Try
                With dlgPrint
                    .AllowSelection = True
                    .ShowNetwork = True
                    .Document = Me.Document
                End With
                If dlgPrint.ShowDialog = Windows.Forms.DialogResult.OK Then
                    Me.Document.Print()
                End If
            Catch ex As Exception
                MsgBox("Print Error: " & ex.Message)
            End Try
        End Sub
    End Class
    Puis remplacer "Dim xxx As New PrintPreviewDialog" par "Dim xxx As New PrintPreviewDialogSelectPrinter".

    Je crois comprendre que la première procédure remplace le bouton d'impression de la fenêtre de prévisualisation qui lance l'impression directe et le remplace par un nouveau bouton qui lance la seconde procédure contenant l'appel à printdialog.
    Enfin quelque chose dans le genre

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Pour faire compliqué ... , il faut le vouloir !
    Mais bravo, tu as ta solution

    Bonne soirée

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

Discussions similaires

  1. Concepteur RAVE sous DELPHI 7 : aperçu avant impression
    Par tarbala dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/06/2020, 01h37
  2. Aperçu avant impression d'un TRichEdit
    Par PoOky dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/02/2016, 00h19
  3. Réponses: 6
    Dernier message: 04/10/2005, 21h18
  4. Aperçu avant impression
    Par Zebulon777 dans le forum Access
    Réponses: 18
    Dernier message: 15/09/2005, 11h46
  5. [Débutante] Aperçu avant impression d'un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 09/07/2004, 10h52

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