[C#] Impression d'un formulaire [Résolu]

Messages postés
83
Date d'inscription
mardi 9 avril 2002
Dernière intervention
17 mai 2005
- - Dernière réponse :  nouganux - 19 août 2008 à 18:54
Bonjour,



Je débute en C#, je voudrais savoir comment peut on imprimer un Form



J'ai un Form qui contient divers Label, TextBox, GroupBox, Button, ...
et je voudrais imprimer ce formulaire sans les boutons et sans changer
la mise en page si possible

J'ai vu dans les sources l'impression d'un RichText mais pas d'un formulaire.



Merci d'avance, et bon code

Vapula
Afficher la suite 

Votre réponse

20/23 réponses

Meilleure réponse
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
3
Merci
Il va te faire une "capture" du control dont tu passes le handle a cette ligne :

msg.HWnd = this.Handle;

Donc pas de toutes les fenetres visibles.

Si tu voulais juste imprimer le contenu d'un panel, tu pourrais mettre



msg.HWnd = monPanel.Handle;




Pour l'imprimer ensuite, tu instancies un objet PrintDocument, et dans l'evemenent PrintPage tu marque :



private void printDoc_PrintPage(object sender, PrintPageEventArgs e)

{

e.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);

}



et hop, c'est imprimé




Mx

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 118 internautes nous ont dit merci ce mois-ci

Commenter la réponse de MorpionMx
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
0
Merci
Déclaration des constantes :



private const int WM_PRINT = 0x0317;

private const int PRF_CHECKVISIBLE = 0x00000001;

private const int PRF_NONCLIENT = 0x00000002;

private const int PRF_CLIENT = 0x00000004;

private const int PRF_ERASEBKGND = 0x00000008;

private const int PRF_CHILDREN = 0x00000010;

private const int PRF_OWNED = 0x00000020;



...



Bitmap bmp = new Bitmap(this.Width, this.Height);

Graphics bmpGraphics = Graphics.FromImage(bmp);

IntPtr bmpHdc = bmpGraphics.GetHdc();



Message msg = new Message();

msg.Msg = WM_PRINT;

msg.HWnd = this.Handle;

msg.WParam = bmpHdc;

msg.LParam =
new IntPtr(PRF_NONCLIENT | PRF_CLIENT | PRF_ERASEBKGND | PRF_CHILDREN |
PRF_OWNED);

this.WndProc(ref msg);



bmpGraphics.ReleaseHdc(bmpHdc);

bmpGraphics.Dispose();



Et ensuite tu n'as plus qu'a imprimer le bitmap bmp

Mx
Commenter la réponse de MorpionMx
Messages postés
83
Date d'inscription
mardi 9 avril 2002
Dernière intervention
17 mai 2005
0
Merci
Merci



Donc si je comprends bien ce code me genere une image de mon ou mes formulaires visible(s).



Mais par contre pour l'impression , je vois pas comment faire.



Vapula
Commenter la réponse de Vapula
Messages postés
83
Date d'inscription
mardi 9 avril 2002
Dernière intervention
17 mai 2005
0
Merci
Merci je vais me débrouiller avec ca va marcher



Bon code

Vapula
Commenter la réponse de Vapula
Messages postés
5
Date d'inscription
lundi 25 juillet 2005
Dernière intervention
3 août 2005
0
Merci
Salut,

J'ai essaye ton code d'imprimer et j'ai reçu ces erreures :
"'System.Messaging.Message' ne contient pas de définition pour 'HWnd'

"System.Messaging.Message' ne contient pas de définition pour 'WParam'"
" 'System.Messaging.Message' ne contient pas de définition pour 'LParam'
" 'essai.email' ne contient pas de définition pour 'WndProc'
Aidez moi svp !!! c tres important pour moi (mon projet de fin d'etudes)!!
Commenter la réponse de swiniya
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
89
0
Merci
Il s'agit ici de la structure System.Windows.Forms.Message, pas de System.Messaging.Message.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
Messages postés
5
Date d'inscription
lundi 25 juillet 2005
Dernière intervention
3 août 2005
0
Merci
Salut ,

J'ai utilise System.Windows.forms pour resoudre le probleme de message mais je reçois ces erreurs encore !! voila le code que j'utilise !!!

private
void pd_PrintPage(
object sender, PrintPageEventArgs e)


{


Bitmap bmp =
new Bitmap(900, 900);


Graphics bmpGraphics = Graphics.FromImage(bmp);


IntPtr bmpHdc = bmpGraphics.GetHdc();


System.Windows.Forms.Message msg =
new Message();



msg.Msg = WM_PRINT;


msg.HWnd = this.Panel1.Handle;


msg.WParam = bmpHdc;


msg.LParam =
new IntPtr(PRF_NONCLIENT | PRF_CLIENT | PRF_ERASEBKGND | PRF_CHILDREN | PRF_OWNED);



this.WndProc(
ref msg);






bmpGraphics.ReleaseHdc(bmpHdc);


bmpGraphics.Dispose();






PrintDocument pd =
new PrintDocument();


e.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);


}



private
void Button3_Click(
object sender, System.EventArgs e)


{



pd.Print();


}

Les erreurs:


...


'essai.email' ne contient pas de définition pour 'Handle'


'essai.email' ne contient pas de définition pour 'WndProc'
: 'System.Web.UI.WebControls.Panel' ne contient pas de définition pour 'Handle'


Le type ou le nom d'espace de noms 'pd' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)


Merci bcp vous me sauvez la vie!!!!!!
Commenter la réponse de swiniya
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
89
0
Merci
Normal donc :
'System.Web.UI.WebControls.Panel' ne contient pas de définition pour 'Handle'

=> Le sujet de ce post concerne les applications windows, pas web.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
Messages postés
5
Date d'inscription
lundi 25 juillet 2005
Dernière intervention
3 août 2005
0
Merci
salut!!

comment pourais-je alors imprimer un panel dans une web application ???
Commenter la réponse de swiniya
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
89
0
Merci
Bonne question, essaie de demander sur les forums de la branche de CodeS-SourceS dédiée à l'ASP/ASP.Net : ASPFr.com

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
Messages postés
29
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
21 février 2006
0
Merci
Bonjour à tous !

Je suis à peu près dans le meme cas. J'ai un formulaire, dans lequel il y a un bouton "Imprimer" permettant d'imprimer ce formulaire.

Ne sacahant absolument pas comment faire, j'ai copié le code donné par MorpionMX. Cependant, quand je clique sur Imprimer, rien ne se passe.

voici mon code (rien d'original, j'ai juste recopié) :



void BImprimerClick(object sender, System.EventArgs e)
{
PrintDocument printDoc = new PrintDocument();
}

private void printDoc_PrintPage(object sender, PrintPageEventArgs e)
{
Bitmap bmp = new Bitmap(this.Width, this.Height);
Graphics bmpGraphics = Graphics.FromImage(bmp);
IntPtr bmpHdc = bmpGraphics.GetHdc();
Message msg = new Message();
msg.Msg = WM_PRINT;
msg.HWnd = this.Handle;
msg.WParam = bmpHdc;
msg.LParam = new IntPtr(PRF_NONCLIENT | PRF_CLIENT | PRF_ERASEBKGND | PRF_CHILDREN | PRF_OWNED);
this.WndProc(ref msg);

bmpGraphics.ReleaseHdc(bmpHdc);
bmpGraphics.Dispose();

e.Graphics.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
}
Commenter la réponse de cs_shoka
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
0
Merci
Salut,
Tu as oublié d'appeler la méthode Print() on dirait.

void BImprimerClick(object sender, System.EventArgs e)
{
PrintDocument printDoc = new PrintDocument();
printDoc.Print();
}


Mx
MVP C#
Commenter la réponse de MorpionMx
Messages postés
29
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
21 février 2006
0
Merci
Ah ça va mieux mais.... il ne m'imprime rien..

J'ai la boite de dialogue qui s'affiche bien mais la feuille sort blanche de l'imprimante.
Commenter la réponse de cs_shoka
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
0
Merci
Je t'avoues que c'est bizare.
Essaies d'enregistrer ton objet Bitmap pour voir s'il contient bien l'image que tu attends.



Mx
MVP C#
Commenter la réponse de MorpionMx
Messages postés
29
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
21 février 2006
0
Merci
je l'enregistre comment ?

avec IO.StreamWriter dans un .bmp ?
(je suis légèrement débutant :D)
Commenter la réponse de cs_shoka
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
0
Merci
bmp.Save("image.bmp");



Mx
MVP C#
Commenter la réponse de MorpionMx
Messages postés
29
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
21 février 2006
0
Merci
je l'ai fait... rien du tout, pas de fichier..

J'ai mis une MessageBox, rien n'apparait.. en fait ma méthode semble être totalement ignorée.
Commenter la réponse de cs_shoka
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
0
Merci
Ah mais oui, j'avais pas fais attention, mais tu ne t'es pas inscrit a l'evenement PrintPage

void BImprimerClick(object sender, System.EventArgs e)
{
PrintDocument printDoc = new PrintDocument();
printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
printDoc.Print();
}



Mx
MVP C#
Commenter la réponse de MorpionMx
Messages postés
29
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
21 février 2006
0
Merci
Merci Morpion ça tourne maintenant ! :)

Autre chose, comment imprimer en format paysage ?

J'essaie de bidouiller un objet PrinterSettings mais je rame un peu :(
Commenter la réponse de cs_shoka
Messages postés
29
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
21 février 2006
0
Merci
Dans la doc du framework, j'ai trouvé
bool PageSettings.Landscape
pour définir si l'impression se fait en paysage. J'ai donc créé un objet pset new PageSettings (et non PrinterSettings) et mis pset.Landscape true.

Cependant l'impression se fait toujours en portrait.
Dois-je lier pset avec le document en cours ? et comment ?

Merci beaucoup pour vos réponses :)
Commenter la réponse de cs_shoka

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.