C# : Imprimer richTextBox avec visual Studio
Fermé
abdimen
Messages postés
18
Date d'inscription
mardi 29 septembre 2009
Statut
Membre
Dernière intervention
22 février 2011
-
Modifié par abdimen le 15/08/2010 à 02:14
Nico# Messages postés 323 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 28 août 2013 - 16 août 2010 à 19:31
Nico# Messages postés 323 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 28 août 2013 - 16 août 2010 à 19:31
1 réponse
Nico#
Messages postés
323
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
28 août 2013
102
15 août 2010 à 10:50
15 août 2010 à 10:50
Salut,
Pour imprimer ton contenu de ta richtextbox il faut que tu recréer un nouveau controle qui herite de ce dernier.
pour sa tu fais un nouveau projet de type Bibliotheque de classe .dll , tu supprimer tout le code que l'editeur a créer par defaut et tu copie celui la a la place.
Ensuite tu fais F6 et apres tu peut ajouter un nouveau controle dans la boite a outils qui s'appelera RichTextBoxPrintable Voila
Pour imprimer ton contenu de ta richtextbox il faut que tu recréer un nouveau controle qui herite de ce dernier.
pour sa tu fais un nouveau projet de type Bibliotheque de classe .dll , tu supprimer tout le code que l'editeur a créer par defaut et tu copie celui la a la place.
using System; using System.Windows.Forms; using System.Drawing; using System.Drawing.Printing; using System.Runtime.InteropServices; namespace RichTextBoxPrintable { public class RichTextBoxPrintable : RichTextBox { private const double Inch = 14.4; [StructLayout(LayoutKind.Sequential)] private struct MARG { public int iLeft, iRight, iTop, iBottom; } [StructLayout(LayoutKind.Sequential)] private struct CARACTERE { public int iMin, iMax; } [StructLayout(LayoutKind.Sequential)] private struct FORMAT { public IntPtr hdc,Target; public MARG Mg, MgPage; public CARACTERE Carac; } private const int Utilisateur = 0x0400; private const int FormatUtilisateur = Utilisateur + 57; [DllImport("USER32.DLL")] private static extern IntPtr EnvoieMessage(IntPtr HWind, int msg,IntPtr Wrp, IntPtr Lrp); public int Impression(int CaracDebut, int CaracFin, PrintPageEventArgs arg) { MARG ZoneImprimable = new MARG { iTop = (int)(arg.MarginBounds.Top * Inch), iBottom = (int)(arg.MarginBounds.Bottom * Inch), iLeft = (int)(arg.MarginBounds.Left * Inch), iRight = (int)(arg.MarginBounds.Right * Inch) }; MARG TaillePage = new MARG { iTop = (int)(arg.PageBounds.Top * Inch), iBottom = (int)(arg.PageBounds.Bottom * Inch), iLeft = (int)(arg.PageBounds.Left * Inch), iRight = (int)(arg.PageBounds.Right * Inch) }; IntPtr hdc = arg.Graphics.GetHdc(); FORMAT ZFormat; ZFormat.Carac.iMin = CaracDebut; ZFormat.Carac.iMax = CaracFin; ZFormat.hdc = hdc; ZFormat.Target = hdc; ZFormat.Mg = ZoneImprimable; ZFormat.MgPage = TaillePage; IntPtr res = IntPtr.Zero; IntPtr wParam = IntPtr.Zero; wParam = new IntPtr(1); IntPtr lParam = IntPtr.Zero; lParam = Marshal.AllocCoTaskMem(Marshal.SizeOf(ZFormat)); Marshal.StructureToPtr(ZFormat, lParam, false); res = EnvoieMessage(Handle, FormatUtilisateur, wParam, lParam); Marshal.FreeCoTaskMem(lParam); arg.Graphics.ReleaseHdc(hdc); return res.ToInt32(); } } }
Ensuite tu fais F6 et apres tu peut ajouter un nouveau controle dans la boite a outils qui s'appelera RichTextBoxPrintable Voila
15 août 2010 à 12:43
merci Nico c# pour votre réponse, mais j'ai encore des choses que j'ai pas compris,
j'ai fait la bibliothèque de classe et j'ai crée la classe "RichTextBoxPrintable" comme vous m'avez dites, puis dans mon projet j'ai fait une référence vers le fichier " RichTextBoxPrintable.dll" et aussi dans la boite à outils (outils/ choisir des éléments de boite à outils et j'ai parcouru " RichTextBoxPrintable.dll" ) et donc RichTextBoxPrintable s'ajoute et il est coché , maintenant je sais pas comment je définir "MonRichTextBox" de mon projet comme un richTextBoxPrintable car cet élément ne figure pas dansla boite à outils et comment mon bouton "imprimer" va appeler la méthode Impression?
Modifié par Nico# le 15/08/2010 à 19:05
tu declare une variable de type int et tu l'instancie a 0;
puis dans la methode PrintPage du controle PrintDocument tu fais
TaVariableInt = TaRichTextBox.Impression(TaVariableInt, TaRichTextBox.TextLength, e);
et puis tu rajoute ce code pour verifier si sa depasse une page
if (TaVariableInt < TaRichTextBox.TextLength)
e.HasMorePages = true;
else
e.HasMorePages = false;
15 août 2010 à 19:40
printDocument1_PrintPage mais il ne l'a pas accepté puisque les arguments sont fausses, j'ai essayer printDocument1.Print mais ça m'a généré un fichier d'extension .xsp mais qui est vide :((
Comment je vais faire l'appel de la nouvelle méthode?Est ce que vous pouvez m'aider à écrire le code de mon bouton imprimer s'il vous plait ?
16 août 2010 à 19:31
tu declare ta variable de type int en dehors de toute methode comme sa
Int MaVar;
ensuite dans L'evenment BeginPrint de ton PrintDocument tu fais
MarVar = 0;
et dans l'evenement PrintPage de PrintDocument tu met le code que je t'est donnée