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

Windows Forms Discussion :

Imprimer un WinForm sans faire de capture d'écran ?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 28
    Par défaut Imprimer un WinForm sans faire de capture d'écran ?
    Bonjour,

    Je cherche à imprimer un form (en c#).
    J'ai trouvé sur les forums une méthode qui revient souvent et qui consiste à faire une capture d'écran et à imprimer l'image ainsi obtenue.
    Mais avec cette méthode, la qualité est très mauvaise.
    Et j'ai besoin d'imprimer le form sans perte de qualité.

    Quelqu'un connait-il un moyen d'imprimer un formulaire sans passer par une capture d'écran ??

    Merci beaucoup pour votre aide.

  2. #2
    Membre confirmé

    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Par défaut
    Qu'est-ce que tu veux dire par "perte de qualité" : l'image obtenue lorsque tu fait une capture d'écran est exactement à la même résolution que ta résolution d'écran actuel.

    Peux-tu nous donner ta procédure de capture d'écran, que se soit via du code C# ou encore le presse-papier (via le bouton Impr. écran) ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 28
    Par défaut
    Merci pour ta réponse.

    J'ignorais que l'image obtenue par la capture écran était à la même résolution que l'écran.
    Dans ce cas j'ignore d'où vient ma perte de qualité, mais le formulaire s'imprime en très mauvaise qualité.

    Les textes sont troubles et les contours de textbox, radioButton et autres ne sont pas nets.

    Voici le code que j'utilise :

    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
    private void menuImprimer_Click(object sender, EventArgs e)
            {
                PrintWindowEx();
                printDocument1.Print();
             }
     
     	private const int WM_PRINT = 0x0317;
            private const int PRF_CLIENT = 0x00000004;
            private const int PRF_CHILDREN = 0x00000010;
     
            public Bitmap PrintWindowEx()
            {
                this.VerticalScroll.Value = 0;
     
                Graphics gr = null;
                IntPtr hdc = IntPtr.Zero;
     
                try
                {
                    memoryImage = new Bitmap(800, 1200, this.CreateGraphics());
     
                    gr = Graphics.FromImage(memoryImage);
                    hdc = gr.GetHdc();
                    IntPtr wParam = hdc;
                    IntPtr lParam = new IntPtr(PRF_CLIENT | PRF_CHILDREN);
                    Message msg = Message.Create(this.Handle, WM_PRINT, wParam, lParam);
                    this.WndProc(ref msg);
                }
                catch { }
                finally
                {
                    if (gr != null)
                    {
                        if (hdc != IntPtr.Zero)
                            gr.ReleaseHdc(hdc);
                        gr.Dispose();
                    }
                }
                return memoryImage;
            }
     
            public void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                e.Graphics.DrawImage(memoryImage, 0, 0);
            }
    Merci pour ton aide.

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Je pense que cette partie là pose problème:
    Essaie d'utiliser les valeurs réelles de la définition de ton écran.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 28
    Par défaut
    Merci pour ta réponse,

    Peux-tu m'indiquer comment récupérer les valeurs de la définition de mon écran?

    Mais je ne suis pas sure de comprendre. Dans l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    memoryImage = new Bitmap(800, 1200, this.CreateGraphics());
    tu conseilles de remplacer l'objet Graphics par les valeurs réelles ?
    ou c'est le '800, 1200' qui pose problème ?
    J'ai mis 800 et 1200 car je pensais que je devais mettre ici les dimensions de mon form...

    Je te remercie de m'aider je suis un peu perdue là...

  6. #6
    Membre confirmé

    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Par défaut
    J'ai parfois eu des problèmes lorsque j'essayais d'imprimer une capture d'écran en voulant l'imprimer sur une page pleine. En effet, la définition d'un écran est généralement inférieur à 100 points par pouces, alors qu'une imprimante à une définition de 300, 600 voir bien au-delà (2000) points par pouce. Si tu veux imprimer une Form sans perdre de qualité, il vaut peut-être mieux de ne pas trop l'étirer

Discussions similaires

  1. Faire une capture d'écran du browser
    Par ptr83 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 21/03/2008, 10h55
  2. Comment faire une capture d'écran pour envoyer sur le forum ?
    Par jlb59 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 3
    Dernier message: 07/07/2007, 17h28
  3. [SOLARIS] Comment faire une capture d'écran?
    Par droussa dans le forum Solaris
    Réponses: 1
    Dernier message: 07/06/2007, 18h05
  4. [FAQ] [OpenGL] "Comment faire une capture d'écran ?"
    Par damienlann dans le forum Contribuez
    Réponses: 1
    Dernier message: 07/06/2006, 17h22
  5. Réponses: 10
    Dernier message: 10/10/2003, 14h25

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