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

Vapula 83 Messages postés mardi 9 avril 2002Date d'inscription 17 mai 2005 Dernière intervention - 11 mai 2005 à 11:58 - 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 

23 réponses

Répondre au sujet
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 11 mai 2005 à 14:47
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de MorpionMx
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 11 mai 2005 à 12:25
0
Utile
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
Vapula 83 Messages postés mardi 9 avril 2002Date d'inscription 17 mai 2005 Dernière intervention - 11 mai 2005 à 14:39
0
Utile
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
Vapula 83 Messages postés mardi 9 avril 2002Date d'inscription 17 mai 2005 Dernière intervention - 11 mai 2005 à 15:02
0
Utile
Merci je vais me débrouiller avec ca va marcher



Bon code

Vapula
Commenter la réponse de Vapula
swiniya 5 Messages postés lundi 25 juillet 2005Date d'inscription 3 août 2005 Dernière intervention - 26 juil. 2005 à 13:52
0
Utile
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
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 28 juil. 2005 à 22:50
0
Utile
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
swiniya 5 Messages postés lundi 25 juillet 2005Date d'inscription 3 août 2005 Dernière intervention - 29 juil. 2005 à 12:14
0
Utile
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
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 29 juil. 2005 à 19:19
0
Utile
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
swiniya 5 Messages postés lundi 25 juillet 2005Date d'inscription 3 août 2005 Dernière intervention - 29 juil. 2005 à 19:23
0
Utile
salut!!

comment pourais-je alors imprimer un panel dans une web application ???
Commenter la réponse de swiniya
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 29 juil. 2005 à 19:28
0
Utile
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
cs_shoka 29 Messages postés jeudi 5 janvier 2006Date d'inscription 21 février 2006 Dernière intervention - 1 févr. 2006 à 16:01
0
Utile
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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 1 févr. 2006 à 16:13
0
Utile
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
cs_shoka 29 Messages postés jeudi 5 janvier 2006Date d'inscription 21 février 2006 Dernière intervention - 1 févr. 2006 à 17:09
0
Utile
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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 1 févr. 2006 à 17:18
0
Utile
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
cs_shoka 29 Messages postés jeudi 5 janvier 2006Date d'inscription 21 février 2006 Dernière intervention - 1 févr. 2006 à 17:40
0
Utile
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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 1 févr. 2006 à 17:44
0
Utile
bmp.Save("image.bmp");



Mx
MVP C#
Commenter la réponse de MorpionMx
cs_shoka 29 Messages postés jeudi 5 janvier 2006Date d'inscription 21 février 2006 Dernière intervention - 1 févr. 2006 à 19:13
0
Utile
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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 1 févr. 2006 à 19:42
0
Utile
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
cs_shoka 29 Messages postés jeudi 5 janvier 2006Date d'inscription 21 février 2006 Dernière intervention - 2 févr. 2006 à 10:28
0
Utile
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
cs_shoka 29 Messages postés jeudi 5 janvier 2006Date d'inscription 21 février 2006 Dernière intervention - 2 févr. 2006 à 10:37
0
Utile
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.

[C#] Impression d'un formulaire - page 2