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 :

enregistrer et imprimer mon formulaire d'impression [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut enregistrer et imprimer mon formulaire d'impression
    Bonjour,
    Sur un log comportant plusieurs forms, j'ai un form d'impression permettant soit d'imprimer, soit d'enregistrer soit encore de quitter le formulaire

    Le sub enregistrement est fait de la maniere suivante :
    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
     
    Private Sub register_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles register.Click
     
            ' enregistre la feuille sous forme de fichier image .jpg
            Imprimer.Visible = False
            Image.Visible = False
            Quitter.Visible = False
            Avant.Visible = False
            Arriere.Visible = False
     
            Try
                Dim p As New ClassImpression()
                p.SetDocument(Me)
                PictureBox.Image = buffer ' ici que picturebox contient le résultat 
     
                ' boite de sauvegarde du fichier
                With SaveFileDialog
                    .Title = "Enregistrer sous"        'Titre de la barre de titre
                    .InitialDirectory = BddPath        'répertoire de départ        
                    .Filter = "Fichiers jpg|*.jpg"     ' on travaille uniquement sur les .jpg
                    .ValidateNames = True              'n'accepte que les noms valides (win 32)
                    .AddExtension = True               'ajoute une extension au nom s'il n'y en a pas
                    .CreatePrompt = True               ' Message de confirmation si création d'un nouveau fichier
                    .OverwritePrompt = True            'Message si le fichier existe déjà : évite l'effacement d'anciennes données
                    If .ShowDialog = DialogResult.OK Then  'L'utilisateur a bien cliqué sur ok
                        PictureBox.Image.Save(.FileName)
                    End If
                End With
     
            Catch ex As Exception
                If langue = "en" Then
                    messageaff = "Image .doc Error"
                    infoaff = "Error"
                Else
                    messageaff = "Erreur fichier image .doc"
                    infoaff = "Erreur"
                End If
                MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
     
            If flagnavigate = True Then
                Afficheboutons()
            End If
            Imprimer.Visible = True
            Image.Visible = True
            Quitter.Visible = True
     
        End Sub

    La classe impression qui valide le format, les dimensions et les marges est la suivante :

    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
     
    ublic Class ClassImpression
     
        Inherits PrintDocument
     
        Public Sub SetDocument(ByVal feuille As Control)
     
            Const SRCCOPY As Integer = &HCC0020 ' pour copier la source
            Dim controlGraphics As Graphics = feuille.CreateGraphics   ' graphique de la feuille à imprimer
            Dim controlSize As Size = feuille.ClientSize ' taille de la forme à copier
            Buffer = New Bitmap(controlSize.Width + 204, controlSize.Height + 312) ' buffer contenant la feuille à copier 
            Dim bufferGraphics As Graphics = Graphics.FromImage(Buffer)
     
            Dim bufferHdc As IntPtr = bufferGraphics.GetHdc   'hdc de la form destinée à l'impression
            Dim controlHdc As IntPtr = controlGraphics.GetHdc
            '*** DESSINE LE FORMULAIRE DANS LA PICTURE EN LE CENTRANT
            NativeMethods.StretchBlt(bufferHdc, 102, 156, controlSize.Width, controlSize.Height, controlHdc, 0, 0, controlSize.Width, controlSize.Height, SRCCOPY)
            bufferGraphics.ReleaseHdc(bufferHdc)
            controlGraphics.ReleaseHdc(controlHdc)
     
        End Sub
     
        Public Sub Imprimeforme()
     
            Dim printDialogue As New PrintDialog()
            printDialogue.Document = Me
            If printDialogue.ShowDialog = DialogResult.OK Then
                printDialogue.PrinterSettings.DefaultPageSettings.PaperSize = printDialogue.PrinterSettings.PaperSizes.Item(6)    'dimensions pour A4
                Me.Print()
            End If
     
        End Sub
     
        Protected Overrides Sub OnPrintPage(ByVal e As System.Drawing.Printing.PrintPageEventArgs)
     
            e.Graphics.DrawImage(buffer, 0, 0) ' impression proprement dite
            e.HasMorePages = False ' document une seule page
     
        End Sub
     
    End Class
    Tout marche impeccablement mais au final, je suis gene car que j'enregistre ou que j'imprime le form j'ai bien une boite de dialogue windows qui me permet de choisir l'imprimante mais ...... je voudrais pouvoir avoir une mise en page un peu comme sous office, avec possibilite de dimensionner les marges et de centrer ou non le print.

    j'avoue que je seche sur la methode a employer et j'aimerais vraiment avoir un conseil avisé

    Merci a tous et toutes par avance

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Bonjour, jette un oeil à tous ces objets qui peuvent t'interesser :

    PageSetupDialog
    PrintDocument
    PrintPreviewDialog

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    Merci bien, je vais regarder cela des demain

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Par défaut
    ca y est ca fonctionne
    effectivement PageSetupDialog, PrintDocument et PrintPreviewDialog m' ont ete salutaires
    Merci bien

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/09/2008, 17h56
  2. Il manque des enregistrements dans mon formulaire
    Par Oneria dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 11/07/2007, 13h03
  3. Réponses: 6
    Dernier message: 26/05/2007, 14h51
  4. Réponses: 6
    Dernier message: 06/06/2006, 12h46
  5. Réponses: 5
    Dernier message: 02/03/2006, 12h10

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