Aperçu avant impression d'un richtextbox

Soyez le premier à donner votre avis sur cette source.

Vue 7 861 fois - Téléchargée 1 151 fois

Description

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...

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Messages postés
40
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
9 février 2013

chiffre

Bonjour M.

J'ai a pris beaucoup pour créer une class «PrintViewRichTextBox1»
dans ton code pour apercu avant Impression

après tout pret de 4 jours + de recherche et d'essai

J'ai pratiquement réussi il me reste, quand j'imprime vue sur la feuille pas bien positionner.

Merci Merci Merci

Jean-Marc

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.