Cette va vous permettre d'avoir un aperçu avant impression d'un contrôle richtextbox, avec un richtextbox modifiée qu'il faudrat générer après avoir créer la classe PrintViewRichTextBox, pour faire ceci :
- Cliquer sur fichier => ajouter => nouveau projet et nommez le PrintViewRichtextbox1.
- Ensuite Cliquez sur ajouter un élément => cliquez sur classe => nommez votre classe PrintViewRichtextbox1.vb puis validez.
- Ajouter le 1er code en dessous de la description puis Importer les références .net : System.Windows.Forms et System.Drawing.
- Allez dans le menu générer et générer le projet.
- Allez ensuite dans votre premier projet et dans boîte à outils ajouter votre PrintViewRichTextBox sur la Form1.
- Ensuite ajouter 3 boutons sur votre Form1.
- Le 1er (Button1), nommez le Aperçu avant impression.
- Le 2ème (button2), nommez le Imprimer.
- Le 3 ème (button3), nommez le Mise en page .
- Ajouter ensuite un PrintPreviewDialog1, un PrintDocument1, un PrintDialog1 et un PageSetupDialog1.
- Cliquez ensuite 1 fois sur PrintPreviewDialog1 et dans la propriété Document du contôle, séléctionner votre PrintDocument1.
- Faites de même pour PrintDialog1 et PageSetupDialog1.
- Ajoutez ensuite le 2ème code dans Form1 donner en conclusion de la classe PrintViewRichTextBox1.
- Il ne vous reste plus qu'a générer encore une fois le projet et je vous dit Bonne Programmation à tous !!!
( Si vous voulez changer l'icone du contrôle PrintPreviewDialog1, il suffit d'ajouter ce code :
Private Sub PrintPreviewDialog1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintPreviewDialog1.Load
PrintPreviewDialog1.Icon = My.Resources.VOTRERESSOURCE
End Sub
Et de remplacer VOTRERESSOURCE par le nom de votre ressource que vous avez importer au projet. )
Pour toute question envoyer moi un message privé.
Source ( msdn ) :
http://support.microsoft.com/kb/811401/fr
Source / Exemple :
Option Explicit On
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports System.Drawing.Printing
Namespace PrintViewRichTextBox1
Public Class PrintViewRichTextBox1
Inherits RichTextBox
Private Const AnInch As Double = 14.4
<StructLayout(LayoutKind.Sequential)> _
Private Structure RECT
Public Left As Integer
Public Top As Integer
Public Right As Integer
Public Bottom As Integer
End Structure
<StructLayout(LayoutKind.Sequential)> _
Private Structure CHARRANGE
Public cpMin As Integer
Public cpMax As Integer
End Structure
<StructLayout(LayoutKind.Sequential)> _
Private Structure FORMATRANGE
Public hdc As IntPtr
Public hdcTarget As IntPtr
Public rc As RECT
Public rcPage As RECT
Public chrg As CHARRANGE
End Structure
Private Const WM_USER As Integer = &H400
Private Const EM_FORMATRANGE As Integer = WM_USER + 57
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr
Public Function Print(ByVal charFrom As Integer, ByVal charTo As Integer, ByVal e As PrintPageEventArgs) As Integer
Dim cRange As CHARRANGE
cRange.cpMin = charFrom
cRange.cpMax = charTo
Dim rectToPrint As RECT
rectToPrint.Top = e.MarginBounds.Top * AnInch
rectToPrint.Bottom = e.MarginBounds.Bottom * AnInch
rectToPrint.Left = e.MarginBounds.Left * AnInch
rectToPrint.Right = e.MarginBounds.Right * AnInch
Dim rectPage As RECT
rectPage.Top = e.PageBounds.Top * AnInch
rectPage.Bottom = e.PageBounds.Bottom * AnInch
rectPage.Left = e.PageBounds.Left * AnInch
rectPage.Right = e.PageBounds.Right * AnInch
Dim hdc As IntPtr = e.Graphics.GetHdc()
Dim fmtRange As FORMATRANGE
fmtRange.chrg = cRange
fmtRange.hdc = hdc
fmtRange.hdcTarget = hdc
fmtRange.rc = rectToPrint
fmtRange.rcPage = rectPage
Dim res As IntPtr = IntPtr.Zero
Dim wparam As IntPtr = IntPtr.Zero
wparam = New IntPtr(1)
Dim lparam As IntPtr = IntPtr.Zero
lparam = Marshal.AllocCoTaskMem(Marshal.SizeOf(fmtRange))
Marshal.StructureToPtr(fmtRange, lparam, False)
res = SendMessage(Handle, EM_FORMATRANGE, wparam, lparam)
Marshal.FreeCoTaskMem(lparam)
e.Graphics.ReleaseHdc(hdc)
Return res.ToInt32()
End Function
End Class
End Namespace
Conclusion :
Le code pour la Form1 sera donc :
Public Class Form1
Private checkPrint As Integer
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
checkPrint = PrintViewRichTextBox11.Print(checkPrint, PrintViewRichTextBox11.TextLength, e)
If checkPrint < PrintViewRichTextBox11.TextLength Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
PageSetupDialog1.ShowDialog()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If PrintDialog1.ShowDialog() = DialogResult.OK Then
PrintDocument1.Print()
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PrintPreviewDialog1.ShowDialog()
End Sub
End Class
Bonne programmation ! Gabilach...
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.