Control dans apercu avant impression [Résolu]

Signaler
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
1 octobre 2010
-
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
-
Bonjour, je souhaiterais imprimer / mettre dans l'apercu un control ou au moin sa valeur.
J'ai trouvé ceci pour c#.net : http://www.codyx.org/snippet_capture-image-form-tous-controles_147.aspx
Mais sa ne fonctionne pas :/
Voila mon code :

 private void pd_PrintPage(object sender, PrintPageEventArgs e)
            {        
                e.Graphics.DrawString("coucou, voili un ptit test", new Font(FontFamily.GenericSansSerif, 4), new            SolidBrush(Color.Black), 25, 45);

                Bitmap lbl = new Bitmap(Label1.Size.Width, base.Size.Height);
                Label1.DrawToBitmap(lbl, new System.Drawing.Rectangle(0, 0, Label1.Size.Width, Label1.Size.Height));
            }
 Le "coucou voili un ptit test" s'affiche bien mais pas le label.
Si quelqu'un pouvias m'eclairer la dessus.
Merci.

10 réponses

Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
pour transformer ton bitmap en image :
Image Img = Image.FromHBitmap(lbl.GetHBitmap());

ensuite, tu n'as pas tout a fait l'air de comprendre ce que tu écris (c'est pas méchant hein ^^)
donc :
ecrire
Bitmap lbl = blablalba
ne signifie pas que tu crée une image. tu ne fait qu'instancier un objet de type bitmap. en bref, cest un objet qui est en mémoire qui peut contenir une bitmap.
ensuite, drawimage...
tu dessine dans le contexte graphique cible (le rectangle que tu as défini) l'image source (ton bitmap qui doit en fait etre une image).
ensuite, le bitmap que tu as créé est vide. il a une taille mais pas d'image a l'intérieur (cest ce que tu as écrit clairement).
A priori, tu devrais plutot récupérer le hDC ou hWnd du controle a dessiner, et recopier la zone du graphics du controle dans le graphics d'impression (je sais pas si cest clair). A vue de nez ca me semble peut etre le plus simple (ton controle a une propriété handle qui correspond au hWnd).
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
1 octobre 2010

Bon et bien j'ai utilisé ce code :http://www.csharpfr.com/infomsg_IMPRIMER-TOUT-CONTENU-FENETRE_733360.aspx
Comme dis Leprov j'ai pas tout tout compris et encore moin avec ce code la mais sa a le merite de marcher donc je vais la regarder de plus pret afin de comprendre quelque chose. Ce qui me chagrine c'est qu'apparment il y a plus simple avec ce code :

Bitmap lbl = new Bitmap(label1.Size.Width, label1.Size.Height);          
Rectangle lblr = new Rectangle(100, 50, label1.Size.Width, label1.Size.Height);

mais je n'arrive pas a l'utiliser donc, merci pour les reponses et je vais essayer de mieux comprendre tout sa.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
private void pd_PrintPage(object sender, PrintPageEventArgs e)
            {        
                e.Graphics.DrawString("coucou, voili un ptit test", new Font(FontFamily.GenericSansSerif, 4), new            SolidBrush(Color.Black), 25, 45);

                // Je crée l'image ??
                Bitmap lbl = new Bitmap(label1.Size.Width, label1.Size.Height);    
                / / Sa position c'est ?
                Rectangle lblr = new Rectangle(100, 50, label1.Size.Width, label1.Size.Height);
                // Et je l'affiche ? Le problème est qu'il demande une Image et non un Bitmap c'est sa le soucis?
                e.Graphics.DrawImage((Image)lbl, lblr);
            }

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
mouaip... et l'image du controle... tu la dessines quand ?

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
tu n'as dessiné que ta string dans ton graphics (pour dire les choses plus simplement). ton bitmap est présent en mémoire mais n'est dessiné nulle part
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Yeps, il faut certainement ajouter un Graphics.DrawImage() qqe part ;-)

<hr size="2" />-Blog-
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
1 octobre 2010

Merci bien de m'aider.
Donc j'ai tenté le graphic.drawImage mais pas de resultat :/

 private void pd_PrintPage(object sender, PrintPageEventArgs e)
            {        
               
e.Graphics.DrawString("coucou, voili un ptit test", new
Font(FontFamily.GenericSansSerif, 4), new           
SolidBrush(Color.Black), 25, 45);

                // Je crée l'image ??
                Bitmap lbl = new Bitmap(label1.Size.Width, label1.Size.Height);    
                / / Sa position c'est ?
                Rectangle lblr = new Rectangle(100, 50, label1.Size.Width, label1.Size.Height);
                // Et je l'affiche ? Le problème est qu'il demande une Image et non un Bitmap c'est sa le soucis?
                e.Graphics.DrawImage(lbl, lblr);
            }
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
hum... Bitmap hérite de Image...

Donc... e.Graphics.DrawImage peut servir pour une Bitmap !

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
1 octobre 2010

Merci pour le code mais je n'y arrive toujours pas avec cette methode il ne m'affiche rien du tout surement a cause du hdc qui n'est pas recuperer ou truc dans ce gout. Je m'attarderais la dessus plus tard quand j'aurais a peu pres compris la l'autre source je devrais pouvoir m'en sortir.
Merci pour votre patience.
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
je répète, ton bitmap ne contient rien, cest donc normal que tu naffiche rien. avant
e.Graphics.DrawImage((Image)lbl, lblr);
tu dois remplir le contenu de ton objet bitmap...