CONTROLE RICHTEXTBOX IMPRIMABLE AVEC LES POLICES ET COULEURS

Signaler
Messages postés
67
Date d'inscription
vendredi 28 mars 2003
Statut
Membre
Dernière intervention
12 juillet 2011
-
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25229-controle-richtextbox-imprimable-avec-les-polices-et-couleurs

Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
27
Très bon contrôle, malgré la 'débilité' de Microsoft lors de la création du RichTextBox .Net qui ne sert pour moi plus à grand chose...

Le RichText Utilise la classe Font qui se voit mettre ses propriétés en ReadOnly, de ce fait il est impossible de faire comme l'on faisait en vb6 par exemple :

MyRTB.SelectionFont.Bold = True

Nous sommes obligé de recréer une nouvelle instance de la classe 'Font' de changer ses propriétés puis d'appliquer cette nouvelle instance, et que ce passe-t-il si dans le texte sélectionné vous avez une partie en italique et une partie en normal ? Et bien oui vous perdez la mise en forme. Vraiment dommage que MS ai si mal conçu le RTB.

Enfin si quelqu'un a une solution...

Dans tous les cas beau travail !
Messages postés
51
Date d'inscription
dimanche 24 août 2003
Statut
Membre
Dernière intervention
29 octobre 2010
1
Hello, je suis comme YOUIL j'aimerai imprimer un richtextbox ou je veux sur une page mais en plus je code en VB-6 ! bref je lance un appel puisque c'est faisable en vb-net je pense que logiquement en vb6 ça doit pouvoir se faire aussi, non?
Messages postés
86
Date d'inscription
jeudi 24 octobre 2013
Statut
Membre
Dernière intervention
2 avril 2014
>
Messages postés
51
Date d'inscription
dimanche 24 août 2003
Statut
Membre
Dernière intervention
29 octobre 2010

A mettre dans ta form :
Function PrintPage()
'la bande gauche non imprimable (=LeftOffSet) fait 194 twips
'la bande supérieure non imprimable (=RightOffSet) fait 170 twips
' la zone imprimable est 11184 x 16116 (largeur x hauteur)
'imprimer RTF avec marges en Twips
PrintRTF txtEntete, txtEntete.Left + 194, txtEntete.Top + 170, 11184 - txtEntete.Left - txtEntete.Width + 194, 16116 - txtEntete.Top - txtEntete.Height + 170

etc ...

A mettre dans un module

Option Explicit

Private Type Rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Type CharRange
cpMin As Long ' First character of range (0 for start of doc)
cpMax As Long ' Last character of range (-1 for end of doc)
End Type

Private Type FormatRange
hdc As Long ' Actual DC to draw on
hdcTarget As Long ' Target DC for determining text formatting
rc As Rect ' Region of the DC to draw to (in twips)
rcPage As Rect ' Region of the entire DC (page size) (in twips)
chrg As CharRange ' Range of text to draw (see above declaration)
End Type

Private Const WM_USER As Long = &H400
Private Const EM_FORMATRANGE As Long = WM_USER + 57
Private Const EM_SETTARGETDEVICE As Long = WM_USER + 72
Private Const PHYSICALOFFSETX As Long = 112
Private Const PHYSICALOFFSETY As Long = 113

Private Declare Function GetDeviceCaps Lib "gdi32" ( _
ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal msg As Long, ByVal wp As Long, _
lp As Any) As Long
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" _
(ByVal lpDriverName As String, ByVal lpDeviceName As String, _
ByVal lpOutput As Long, ByVal lpInitData As Long) As Long


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' PrintRTF - Prints the contents of a RichTextBox control using the
' provided margins
'
' RTF - A RichTextBox control to print
'
' LeftMarginWidth - Width of desired left margin in twips
'
' TopMarginHeight - Height of desired top margin in twips
'
' RightMarginWidth - Width of desired right margin in twips
'
' BottomMarginHeight - Height of desired bottom margin in twips
'
' Notes - If you are also using WYSIWYG_RTF() on the provided RTF
' parameter you should specify the same LeftMarginWidth and
' RightMarginWidth that you used to call WYSIWYG_RTF()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub PrintRTF(RTF As RichTextBox, LeftMarginWidth As Long, _
TopMarginHeight, RightMarginWidth, BottomMarginHeight)
Dim LeftOffset As Long, TopOffset As Long
Dim LeftMargin As Long, TopMargin As Long
Dim RightMargin As Long, BottomMargin As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim NextCharPosition As Long
Dim r As Long

' Start a print job to get a valid Printer.hDC
Printer.Print Space(1)
Printer.ScaleMode = vbTwips

' Get the offsett to the printable area on the page in twips
LeftOffset = Printer.ScaleX(GetDeviceCaps(Printer.hdc, _
PHYSICALOFFSETX), vbPixels, vbTwips)
TopOffset = Printer.ScaleY(GetDeviceCaps(Printer.hdc, _
PHYSICALOFFSETY), vbPixels, vbTwips)

' Calculate the Left, Top, Right, and Bottom margins
LeftMargin = LeftMarginWidth - LeftOffset
TopMargin = TopMarginHeight - TopOffset
RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset
BottomMargin = (Printer.Height - BottomMarginHeight) - TopOffset

' Set printable area rect
rcPage.Left = 0
rcPage.Top = 0
rcPage.Right = Printer.ScaleWidth
rcPage.Bottom = Printer.ScaleHeight

' Set rect in which to print (relative to printable area)
rcDrawTo.Left = LeftMargin
rcDrawTo.Top = TopMargin
rcDrawTo.Right = RightMargin
rcDrawTo.Bottom = BottomMargin

' Set up the print instructions
fr.hdc = Printer.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Printer.hdc ' Point at printer hDC
fr.rc = rcDrawTo ' Indicate the area on page to draw to
fr.rcPage = rcPage ' Indicate entire size of page
fr.chrg.cpMin = 0 ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text

' Get length of text in RTF
TextLength = Len(RTF.Text)

' Loop printing each page until done
Do
' Print the page by sending EM_FORMATRANGE message
NextCharPosition = SendMessage(RTF.hwnd, EM_FORMATRANGE, True, fr)
If NextCharPosition >= TextLength Then Exit Do 'If done then exit
fr.chrg.cpMin = NextCharPosition ' Starting position for next page
Printer.NewPage ' Move on to next page
Printer.Print Space(1) ' Re-initialize hDC
fr.hdc = Printer.hdc
fr.hdcTarget = Printer.hdc
Loop

' Commit the print job
' Printer.EndDoc

' Allow the RTF to free up memory
r = SendMessage(RTF.hwnd, EM_FORMATRANGE, False, ByVal CLng(0))
End Sub



Printer.EndDoc
Messages postés
67
Date d'inscription
vendredi 28 mars 2003
Statut
Membre
Dernière intervention
12 juillet 2011

OK merci !!

Mais tu sais comment faire pour imprimer le contenu d'un viewer autocad comme le fait Excel, Word, Access avec les objetole.
Afficher les 6 commentaires