Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour Driss,
J'ai déjà utilisé des RTF, la structure est proche de celle d'un
fichier doc, toutefois a priori ça irait plus vite de lancer Word, car ça
répond sans programmation à tout ce que tu veux (mise en forme,
impression, aperçu)...
--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.
"Driss HANIB" a écrit dans le message de
news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour Driss,
J'ai déjà utilisé des RTF, la structure est proche de celle d'un
fichier doc, toutefois a priori ça irait plus vite de lancer Word, car ça
répond sans programmation à tout ce que tu veux (mise en forme,
impression, aperçu)...
--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.
"Driss HANIB" <dhanib@club-internet.fr> a écrit dans le message de
news:u69hlGBHKHA.4376@TK2MSFTNGP03.phx.gbl...
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour Driss,
J'ai déjà utilisé des RTF, la structure est proche de celle d'un
fichier doc, toutefois a priori ça irait plus vite de lancer Word, car ça
répond sans programmation à tout ce que tu veux (mise en forme,
impression, aperçu)...
--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.
"Driss HANIB" a écrit dans le message de
news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String, CharDebut
As Long, Left As Long, Top As Long, Width As Long, ByRef Height As Long,
PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" a écrit dans le message de news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String, CharDebut
As Long, Left As Long, Top As Long, Width As Long, ByRef Height As Long,
PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" <dhanib@club-internet.fr> a écrit dans le message de news:
u69hlGBHKHA.4376@TK2MSFTNGP03.phx.gbl...
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String, CharDebut
As Long, Left As Long, Top As Long, Width As Long, ByRef Height As Long,
PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" a écrit dans le message de news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé, pour
pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini traitements
de texte en VB6), puis récupérer les balises de mise en forme et les
transformer en balises "maison" avec lesquelles je piloterai mon
impression et donc je sauvegarderai tout cela dans une BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut de
page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" a écrit dans le message de news:
%Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef Height
As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" a écrit dans le message de news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une BDD
access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut de
page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" <patrick@vip-organisation.com> a écrit dans le message de news:
%23UkkyzlHKHA.1336@TK2MSFTNGP05.phx.gbl...
Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef Height
As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" <dhanib@club-internet.fr> a écrit dans le message de news:
u69hlGBHKHA.4376@TK2MSFTNGP03.phx.gbl...
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une BDD
access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut de
page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" a écrit dans le message de news:
%Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef Height
As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" a écrit dans le message de news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et le
mettre en forme (couleur, taille de texte, gras italique, centré..) puis
sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes, gérés
différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une BDD
access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
C'est géré dans la source
PrintRTFEcran retourne l'indice du dernier caractère imprimé
si tu veut reprendre sur la page suivante, il faut reprendre à partir de
cet indice en le donnant en parametres CharDebut
"driss hanib" a écrit dans le message de news:Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut
de page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" a écrit dans le message de news:
%Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef
Height As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" a écrit dans le message de news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et
le mettre en forme (couleur, taille de texte, gras italique, centré..)
puis sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes,
gérés différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une
BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
C'est géré dans la source
PrintRTFEcran retourne l'indice du dernier caractère imprimé
si tu veut reprendre sur la page suivante, il faut reprendre à partir de
cet indice en le donnant en parametres CharDebut
"driss hanib" <dhanib@club-internet.fr> a écrit dans le message de news:
Ownl8RqHKHA.4168@TK2MSFTNGP05.phx.gbl...
Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut
de page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" <patrick@vip-organisation.com> a écrit dans le message de news:
%23UkkyzlHKHA.1336@TK2MSFTNGP05.phx.gbl...
Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef
Height As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" <dhanib@club-internet.fr> a écrit dans le message de news:
u69hlGBHKHA.4376@TK2MSFTNGP03.phx.gbl...
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et
le mettre en forme (couleur, taille de texte, gras italique, centré..)
puis sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes,
gérés différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une
BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
C'est géré dans la source
PrintRTFEcran retourne l'indice du dernier caractère imprimé
si tu veut reprendre sur la page suivante, il faut reprendre à partir de
cet indice en le donnant en parametres CharDebut
"driss hanib" a écrit dans le message de news:Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut
de page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" a écrit dans le message de news:
%Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef
Height As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il suffit
de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" a écrit dans le message de news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et
le mettre en forme (couleur, taille de texte, gras italique, centré..)
puis sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes,
gérés différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une
BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Merc Patrick
je n'avais effectivement pas vu toute la source
Je regarde
Driss
"Patrick" a écrit dans le message de news:C'est géré dans la source
PrintRTFEcran retourne l'indice du dernier caractère imprimé
si tu veut reprendre sur la page suivante, il faut reprendre à partir de
cet indice en le donnant en parametres CharDebut
"driss hanib" a écrit dans le message de news:Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut
de page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" a écrit dans le message de
news: %Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional
look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef
Height As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il
suffit de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" a écrit dans le message de
news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et
le mettre en forme (couleur, taille de texte, gras italique, centré..)
puis sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes,
gérés différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une
BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Merc Patrick
je n'avais effectivement pas vu toute la source
Je regarde
Driss
"Patrick" <patrick@vip-organisation.com> a écrit dans le message de news:
OulAp19IKHA.1684@TK2MSFTNGP04.phx.gbl...
C'est géré dans la source
PrintRTFEcran retourne l'indice du dernier caractère imprimé
si tu veut reprendre sur la page suivante, il faut reprendre à partir de
cet indice en le donnant en parametres CharDebut
"driss hanib" <dhanib@club-internet.fr> a écrit dans le message de news:
Ownl8RqHKHA.4168@TK2MSFTNGP05.phx.gbl...
Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut
de page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" <patrick@vip-organisation.com> a écrit dans le message de
news: %23UkkyzlHKHA.1336@TK2MSFTNGP05.phx.gbl...
Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional
look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef
Height As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il
suffit de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" <dhanib@club-internet.fr> a écrit dans le message de
news: u69hlGBHKHA.4376@TK2MSFTNGP03.phx.gbl...
Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et
le mettre en forme (couleur, taille de texte, gras italique, centré..)
puis sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes,
gérés différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une
BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss
Merc Patrick
je n'avais effectivement pas vu toute la source
Je regarde
Driss
"Patrick" a écrit dans le message de news:C'est géré dans la source
PrintRTFEcran retourne l'indice du dernier caractère imprimé
si tu veut reprendre sur la page suivante, il faut reprendre à partir de
cet indice en le donnant en parametres CharDebut
"driss hanib" a écrit dans le message de news:Salut Patrick
Merci pour ta réponse.
Je vais tester ta version, mais le seule point qui peut gêner est que
j'intègre ces données dans un autre texte et donc je dois aussi gerer le
fait que le texte peut dépasser le bas de la page et donc gérer le saut
de page.
Je vais voir cependant comment "travaille" ta source..
Merci
Driss
"Patrick" a écrit dans le message de
news: %Bonjour
Il existe des gens qui ont déjà travaillé sur ce type de gestion.
Le plus simple est de ne pas interpréter le RTF, mais de laisser le
controle le faire pour toi.
En cherchant sur internet, on trouve des programmes qui permettent
d'imprimer un RTF
voici un petit exemple de code que j'ai adapté pour faire exactement la
même chose (aperçu et impression d'un document) :
Dans la feuille ModRTFPrint, tu met juste un controle RTFRichtextbox
utilisé pour mettre le texte formaté
Obj est une picturebox
If Left(Text, 6) = "{rtf1" Then
' texte RTF (courrier)
Start = 0
While Start < Len(mvarText) + 1
Start = PrintRTFEcran(Obj, Text, Start, X + PosXEnCours, Y,
TXEnCours, TY, Y + TY - 850)
If mvarNbCol > 1 Then
PosXEnCours = PosXEnCours + TXEnCours + mvarEspaceCol
Obj.CurrentY = Y
If PosXEnCours >= TX Then Start = Len(mvarText) + 1
Else
Obj.CurrentY = Y + TY
Start = Len(mvarText) + 1
End If
Wend
Else
' Texte normal
'The RichTextBox provides you with a simple printing function, but this
tip shows
'you how to add margins to your print outs for a more professional
look.
'Add this code to a module:
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 Integer) 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
Public Function PrintRTFEcran(Obj As PictureBox, Text As String,
CharDebut As Long, Left As Long, Top As Long, Width As Long, ByRef
Height As Long, PageHeight As Long) As Long
Dim fr As FormatRange
Dim rcDrawTo As Rect
Dim rcPage As Rect
Dim TextLength As Long
Dim r As Long
RTF.TextRTF = Text
If RTF.Text = "" Then
Unload Me
Height = 0
Exit Function
End If
' Start a print job to get a valid Printer.hDC
Obj.ScaleMode = vbTwips
' 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 = Left
rcDrawTo.Top = Top
rcDrawTo.Right = Left + Width
rcDrawTo.Bottom = Top + Height
' Set up the print instructions
fr.hdc = Obj.hdc ' Use the same DC for measuring and rendering
fr.hdcTarget = Obj.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 = CharDebut ' Indicate start of text through
fr.chrg.cpMax = -1 ' end of the text
' impression sur la page actuelle
PrintRTFEcran = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
Height = fr.rc.Bottom - Top
If PrintRTFEcran >= Len(RTF.Text) Then PrintRTFEcran = 0
' Allow the RTF to free up memory
r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
Unload Me
End Function
Pour une impression vers l'imprimant, rien de plus compliqué : il
suffit de remplacer Obj par printer, et d'adapter un peu le code...
Bon courage
"Driss HANIB" a écrit dans le message de
news:Bonjour à tous
Je voudrai permettre à un utilisateur de créer un morceau de texte et
le mettre en forme (couleur, taille de texte, gras italique, centré..)
puis sauvegarder ce texte mis en forme l'imprimer.
Seulement je veux utiliser un aperçu avant impression que j'ai créé,
pour pouvoir insérer ce texte mis en forme, parmi d'autres textes,
gérés différemment..
Je pensais utiliser un RTF Box (on trouve sur le net des mini
traitements de texte en VB6), puis récupérer les balises de mise en
forme et les transformer en balises "maison" avec lesquelles je
piloterai mon impression et donc je sauvegarderai tout cela dans une
BDD access.
Question y-a-t'il un moyen d'interpréter ces données issues du RTF ?
Quelq'un a-t'il déjà creusé cette voie ?
Merci pour vos lumières
Driss