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 :

[VS2003] Comment imprimer une fenêtre windows? [Fait]


Sujet :

Windows Forms

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut [VS2003] Comment imprimer une fenêtre windows?
    Bonjour tout le monde,

    Voila j'ai la fenêtre que j'ai joint dans le document word.

    Je souhaiterais en cliquant sur le bouton "imprimer", pouvoir imprimer le contenu avec en + une entete correspondant aux coordonnées de l'entreprise.

    Je sait pas trop comment je peux faire cela donc si quelqu'un a une idée??

    Merci d'avance!!

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut, je pourrais te rediriger vers d'autres (parceque c'est pas ça qui manque ), mais l'impression c'est toujours un sujet galère (et donc les posts sont toujours un peu fouilli).

    Pour imprimer sur une imprimante, tu peux utilliser la classe System.Drawing.Printing.PrintDocument.

    Et faire ainsi (les explications des étapes sont dans les commentaires du 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
    private void buttonImprimer_Click(object sender, EventArgs e) 
    { 
        PrintDocument pd = new PrintDocument();
     
        // évènement déclenché juste avant l'impression pour obtenir un dessin
        pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
        // lancement de l'impression
        pd.Print(); 
    }
     
    private void pd_PrintPage(object sender, PrintPageEventArgs e) 
    { 
        // Là c'est comme si tu fais un dessin normal 
        Graphics dc = e.Graphics; 
     
        // tu fait ton dessin sur le support dc (c'est là que tu peux dessiner ton entête entreprise puis ajouter le contenu de la Form). 
     
        // Test s'il n'y a plus aucune page à imprimer 
        if ( Condition ) 
            e.HasMorePages = true;
        else 
            e.HasMorePages = false;
    }
    Voilà une piste

    Pour dessiner le contenu de la fenêtre dans le Graphics, tu peux t'inspirer du lien de la FAQ qui suit (mais en simulant les touches ALT + CTRL) : http://faqcsharp.developpez.com/?pag...us_printscreen

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à binoo
    Merci pour ta réponse mais j'ai quelques soucis.

    Pour le moment je fais sans insérer l'entete correspondant aux coordonnées de l'entreprise.

    Voici le code du bouton "imprimer" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void Imprimer_Click(object sender, System.EventArgs e)
    		{
    			PrintDocument pd = new PrintDocument();
     
    			// évènement déclenché juste avant l'impression pour obtenir un dessin
    			pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
    			// lancement de l'impression
    			pd.Print(); 
    		}
    Voici le code de pd_PrintPage :
    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
    private void pd_PrintPage(object sender, PrintPageEventArgs e) 
    		{ 
    			// Là c'est comme si tu fais un dessin normal 
    			Graphics dc = e.Graphics; 
     
    			// tu fait ton dessin sur le support dc (c'est là que tu peux dessiner ton entête entreprise puis ajouter le contenu de la Form). 
    			Bitmap screen;
    			Bitmap window;
     
    			// simuler l'appui de la touche PrintScreen
    			SendKeys.SendWait("{PRTSC}");
    			// récupérer l'image obtenue dans le Presse-Papier 
    			window = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
    			// attribuer l'image à PBWindow
    			PBWindow.Image = window;
     
    			// simuler le PrintScreen enrichi
    			SendKeys.SendWait("+{PRTSC}");
    			// récupérer l'image obtenue dans le Presse-Papier
    			screen = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
    			// attribuer l'image à PBScreen
    			PBScreen.Image = screen;
    			/*
    						// Test s'il n'y a plus aucune page à imprimer 
    						if ( Condition ) 
    							e.HasMorePages = true;
    						else 
    							e.HasMorePages = false;  
    			*/		}
    	}
    Pour le moment j'ai mit la partie suivante en commentaire car je vois pas quoi mette comme condition(comment la formuler).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /*
    						// Test s'il n'y a plus aucune page à imprimer 
    						if ( Condition ) 
    							e.HasMorePages = true;
    						else 
    							e.HasMorePages = false;  
    			*/
    Puis a chaque fois, cela m'imprimer une feuille vide. Mes PictureBox me montre les choses que j'ai insérer dans le document word ci-joint.

    Merci d'avance!!

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    En fait il faut utiliser dc, cf. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics dc = e.Graphics
    e étant un PrintPageEventArgs, donc lié à l'impression

    La, rien n'est dessiné sur le support dc.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à binoo
    Ok, je me doutais qu'il y avait un problème de dessin, mais je vois pas trop comment faire mais bon merci quand même!! Je vais continuer à m'arracher les cheveux
    lol

    Cordialement!!

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Si ça peut t'aider, tu peux ajouter un bitmap au graphique de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics g = Graphics.FromImage(myBitmap);

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à binoo
    Tout d'abord, merci pour ton aide.

    Je viens d'essayer en rajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			dc = Graphics.FromImage(PBScreen.Image);
    			dc = Graphics.FromImage(PBWindow.Image);
    dans le code "private void pd_PrintPage(object sender, PrintPageEventArgs e)".
    Mais c'est toujours pareil.

    Je pense que ça vient du fait que je m'occupe pas du nombre de page, qu'en pense tu?? mais je vois bof comment faire.

    Merci d'avance!!

    P.S. : suis sur que jen suis pas loin mais je bloque!!

    Cordialement.

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Je vient de réussir à imprimer quelque chose.

    Donc tout d'abord j'ai imprimer la première page dans les documents jointes ("impression2"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... e.Graphics.DrawImage(PBWindow.Image, new PointF(100, 100));...
    Puis si j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .... e.Graphics.DrawImage(PBScreen.Image, new PointF(100, 100)); ....
    j'obtien la deuxième image ("impression1").

    Donc la meilleure fenêtre est la deuxième ("impression1") mais j'ai quand même des problème :
    J'aimerais que :
    * la fenêtre s'imprimme sur toute la feuille.
    * les boutons disparraisse
    * Si possible que les comboBox devienne des text box voir label.
    * La fenêtre "Impression" en haut à geuche est elle suprimable sur l'affichage de la feuille imprimer.

    Parce que si j'ai bien compris, cette feuille sera passé au client donc faut qu'elle soit présentable.

    Es-ce que cela est-il possible??

    Voici le code dans sa totalité pour l'impression :
    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
    private void Imprimer_Click(object sender, System.EventArgs e)
    		{
    			PrintDocument pd = new PrintDocument();
     
    			// évènement déclenché juste avant l'impression pour obtenir un dessin
    			pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
     
    			// lancement de l'impression
    			pd.Print();
     
    		}
     
    		private void pd_PrintPage(object sender, PrintPageEventArgs e) 
    		{ 
    			PBWindow.Visible = true;
    			PBScreen.Visible = true;
     
    			// Là c'est comme si tu fais un dessin normal 
    			Graphics dc = e.Graphics; 
     
    			// tu fait ton dessin sur le support dc (c'est là que tu peux dessiner ton entête entreprise puis ajouter le contenu de la Form). 
    			Bitmap screen;
    			Bitmap window;
     
    			// simuler l'appui de la touche PrintScreen
    			SendKeys.SendWait("{PRTSC}");
    			// récupérer l'image obtenue dans le Presse-Papier 
    			window = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
    			// attribuer l'image à PBWindow
    			PBWindow.Image = window;
     
    			// simuler le PrintScreen enrichi
    			SendKeys.SendWait("+{PRTSC}");
    			// récupérer l'image obtenue dans le Presse-Papier
    			screen = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
    			// attribuer l'image à PBScreen
    			PBScreen.Image = screen;
     
    			dc = Graphics.FromImage(PBScreen.Image);
    			dc = Graphics.FromImage(PBWindow.Image);
     
    			e.Graphics.DrawImage(PBWindow.Image, new PointF(100, 100));
     
    			// Test s'il n'y a plus aucune page à imprimer 
    			if ( dc == null ) 
    				e.HasMorePages = true;
    			else 
    				e.HasMorePages = false;  
    		}
    Coridialement.

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    la fenêtre s'imprimme sur toute la feuille.
    Je pense avoir trouvé une solution pour résoudre ce problème(je l'essayerai demain car la je risque de ne pas avoir le temps aujourd'hui) c'ets à dire qu'il faudrais que je mette ma fenêtre en pleine page et qu'après je joue avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .... e.Graphics.DrawImage(PBScreen.Image, new PointF(100, 100)); ....
    * les boutons disparraisse
    * Si possible que les comboBox devienne des text box voir label.
    J'ai eu une idée mais je sais pas si c'est possible et si ça l'est je sais pas trop comment faire. Ca serait en faisant en sorte qu'en cliquant sur le bouton "Imprimer" les renseignement de la fenêtre s'inscrive dans une autre Forms et qu'en suite cela s'imprime.

    * La fenêtre "Impression" en haut à geuche est elle suprimable sur l'affichage de la feuille imprimer
    J'ai pensé qu'il faudrais qu'une fois affiché, elle se retire avant l'impression.

    Je souhaiterais avoir votre avis?? vos conseils?? vos aides sur ce dont je pense pour résoudre mes problèmes.

    Merci d'avance!!

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut HELP ME, BESOIN D'AIDE!!
    Bonjour tout le monde,

    Bon ben voila je pense essyaer de faire d ela manière suivante :
    Ca serait en faisant en sorte qu'en cliquant sur le bouton "Imprimer" les renseignement de la fenêtre s'inscrive dans une autre Forms et qu'en suite cela s'imprime(la nvle form en faite).
    mais je sait pas trop comment je pourrais faire, j'avais pensé faire avec un héritage c'est à dire que ma nvle form hérite de ma form "NvleInter" mais si je fais cela, ça me reproduis tout les bouton, combo dans la nouvelle form, c'est pas ce que je souhaite. Moi j'aimerais créer moi même les label voir textBox dans la nouvelle form.

    Comment puis-je faire??

    Merci d'avance!!

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    J'ai réussis à faire en sorte d'imprimer ma deuxième form.

    Mes 2 problèmes à présents sont :
    *Je souhaiterais que dans la feuille imprimé, on ne voye pas la barre "démarrer" et le titre de la fenêtre. Cela est-il possible??si oui, comment dois-je procéder s'il vous plais??
    * Ci-joint, la boîte de dialogue qui apparît avant l'impression. Le message "Page 1 sur document" est incomplet d'aprés moi, comment puis-je le remplir?? (c'est à dire avoir "Page 1 sur 1 document")

    Voici le code que j'utilise pour l'impression :
    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
     
    private void Imprimer_Click(object sender, System.EventArgs e)
    		{
    			PrintDocument pd = new PrintDocument();
     
    			CreationBitmap();
     
    			// évènement déclenché juste avant l'impression pour obtenir un dessin
    			pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
     
    			// lancement de l'impression
    			pd.Print(); 
    		}
     
    		private void CreationBitmap()
    		{
    			Bitmap screen;
    			Bitmap window;
    			Imprimer.Visible = false;
     
    			// simuler l'appui de la touche PrintScreen
    			SendKeys.SendWait("{PRTSC}");
    			// récupérer l'image obtenue dans le Presse-Papier 
    			window = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
    			// attribuer l'image à PBWindow
    			PBWindow.Image = window;
     
    			// simuler le PrintScreen enrichi
    			SendKeys.SendWait("+{PRTSC}");
    			// récupérer l'image obtenue dans le Presse-Papier
    			screen = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
    			// attribuer l'image à PBScreen
    			PBScreen.Image = screen;
    		}
     
    		private void pd_PrintPage(object sender, PrintPageEventArgs e) 
    		{ 
    			// Là c'est comme si tu fais un dessin normal 
    			Graphics dc = e.Graphics; 
     
    			dc = Graphics.FromImage(PBScreen.Image);
    			dc = Graphics.FromImage(PBWindow.Image);
     
    			e.Graphics.DrawImage(PBScreen.Image, new PointF(50, 10));
     
    			// Test s'il n'y a plus aucune page à imprimer 
    			if ( dc == null ) 
    				e.HasMorePages = true;
    			else 
    				e.HasMorePages = false;  
    		}
    Ce code se situe derrière l'événement du clic d'un bouton se situant sur ma deuxième form(celle à imprimer). Ce bouton n'apparait plus uen fois que l'on a cliqué dessus (Imprimer.Visible = false

    Merci d'avance pour votre aide!!

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Bonjour tout le monde,

    J'ai enfin réussis à résoudre mon premier problème :
    Je souhaiterais que dans la feuille imprimé, on ne voye pas la barre "démarrer" et le titre de la fenêtre. Cela est-il possible??si oui, comment dois-je procéder s'il vous plais??
    de la manière 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    public Bitmap PrintWindowEx()
    		{
    			Bitmap bmp = null;
    			Graphics gr = null;
    			IntPtr hdc = IntPtr.Zero;
    			try
    			{
    				bmp = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height, this.CreateGraphics());
    				gr = Graphics.FromImage(bmp);
    				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 bmp;
    		}
     
     
    		private void Imprimer_Click(object sender, System.EventArgs e)
    		{
    			Imprimer.Visible = false;
     
    			PrintDocument pd = new PrintDocument();
     
    			// évènement déclenché juste avant l'impression pour obtenir un dessin
    			pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); 
     
    			// lancement de l'impression
    			pd.Print(); 
    		}
     
    		private void pd_PrintPage(object sender, PrintPageEventArgs e) 
    		{ 
    			// Là c'est comme si tu fais un dessin normal 
    			Graphics dc = e.Graphics; 
     
    			e.Graphics.DrawImage(PrintWindowEx(), new PointF(50, 10));
     
    			// Test s'il n'y a plus aucune page à imprimer 
    			if ( dc == null ) 
    				e.HasMorePages = true;
    			else 
    				e.HasMorePages = false;  
    		}
     
    		private void FenetreImpression_Load(object sender, System.EventArgs e)
    		{
     
    		}
    Mais pour mon deuxième problème, je ne sait toujours pas comment faire donc si quelqu'un a une idée??
    la boîte de dialogue qui apparît avant l'impression. Le message "Page 1 sur document" est incomplet d'aprés moi, comment puis-je le remplir?? (c'est à dire avoir "Page 1 sur 1 document")
    Merci d'avance!!

Discussions similaires

  1. [VB.NET]Comment Imprimer une form
    Par bernard06 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/10/2011, 17h43
  2. Comment récupérer une fenêtre Windows dans un objet Form de VB ?
    Par Najdar dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 22/04/2010, 11h40
  3. Réponses: 2
    Dernier message: 13/05/2008, 09h06
  4. Comment fermer une fenêtre quand la souris et clavier sont inactifs ?
    Par Goldenkiller dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/12/2004, 22h09
  5. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 15h54

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