Yo uso perfectamente este código para convertir el contenido de un objeto olecontrol richtext de mi formulario y me devuelve en formato htlm
Local LCHTML As String, LCCOLOR As String, LCSHARP As String, LCALIGN As String, LCFONT As String, LCTMPCOLOR As String, LCTMPLINK As String, LCCHARSET As String, LCCODEASCII As String, LCCURCHAR As String, LCCURHIGHLIGHTCOLOR As String
Local LNORIGSTART As Integer, LNORIGLENGTH As Integer, LNCHARINDEX As Integer, LNALIGN As Integer, LNFONTSIZE As Integer, LINDEX As Integer, LNENDLINK As Integer, LNSTARTLINK As Integer, LNRTFCOLORS As Integer, LNCURHIGHLIGHTINDEX As Integer, LNDANGLINGSPAN As Integer
Local LLBOLD As LOGICAL, LLITALIC As LOGICAL, LLUNDERLINE As LOGICAL, LLWARNUSER As LOGICAL, LLSTRIKED As LOGICAL, LLBULLET As LOGICAL, LLHIGHLIGHT As LOGICAL, LLSTYLECHANGE As LOGICAL, LLSUBSCRIPT As LOGICAL, LLSUPERSCRIPT As LOGICAL
Local LOOCX As OleControl
Local LACOLORTBL[1]
LLWARNUSER = .T.
LCCURHIGHLIGHTCOLOR = ""
LNDANGLINGSPAN = 0
LOOCX = This.OOLERTF &&aqui hace referencia al objeto olecontrol del richtext que debe estar en tu formulario con el contenido en texto enriquecido
If Len(LOOCX.Text)>0
LCSHARP = "#"
LNORIGSTART = 0
LNGORIGLENGTH = Len(LOOCX.Text)
LOOCX.SelStart = 0
LOOCX.SelLength = 1
LCHTML = ""
LCCOLOR = Right("000000"+Substr(Transform(LOOCX.SELCOLOR, "@0"), 3), 6)
LCCOLOR = Right(LCCOLOR, 2)+Substr(LCCOLOR, 3, 2)+Left(LCCOLOR, 2)
LLBOLD = LOOCX.SELBOLD
LLITALIC = LOOCX.SELITALIC
LLUNDERLINE = LOOCX.SELUNDERLINE
LLSTRIKED = LOOCX.SELSTRIKETHRU
LLSUBSCRIPT = LOOCX.SELCHAROFFSET<0
LLSUPERSCRIPT = LOOCX.SELCHAROFFSET>0
LLBULLET = .F.
LLHIGHLIGHT = Atc('\highlight', LOOCX.SELRTF)>0
LCFONT = LOOCX.SELFONTNAME
LNFONTSIZE = LOOCX.SELFONTSIZE
LNALIGN = LOOCX.SELALIGNMENT
LCALIGN = Icase(LOOCX.SELALIGNMENT=0, 'Left', LOOCX.SELALIGNMENT=1, 'Right', LOOCX.SELALIGNMENT=2, 'Center', 'Left')
LCHTML = LCHTML+'<div align="'+LCALIGN+'">'
LCHTML = LCHTML+'<span style="font-family: '+LCFONT+'; font-size: '+Transform(LNFONTSIZE)+'pt; color: '+LCSHARP+Left(LCCOLOR, 6)+'">'
LCHTML = LCHTML+Iif(LLBOLD, '<b>', "")+Iif(LLITALIC, '<i>', "")+Iif(LLUNDERLINE, '<u>', "")+Iif(LLSTRIKED, '<del>', "")
LNCHARINDEX = 0
Do While LNCHARINDEX<=Len(LOOCX.Text)
LNCHARINDEX = LNCHARINDEX+1
LOOCX.SelStart = LNCHARINDEX-1
LOOCX.SelLength = 1
If Len(LOOCX.SelText)>0
If Asc(LOOCX.SelText)=32 .And. LLWARNUSER
If Atc(LOOCX.SELRTF, "\pict\")>0
If LLWARNUSER
Messagebox("Warning! Images are ignored!!!", 48, "Warning")
Endif
Endif
Endif
Endif
LCTMPCOLOR = Right("000000"+Substr(Transform(LOOCX.SELCOLOR, "@0"), 3), 6)
LCTMPCOLOR = Right(LCTMPCOLOR, 2)+Substr(LCTMPCOLOR, 3, 2)+Left(LCTMPCOLOR, 2)
LLSTYLECHANGE = LCTMPCOLOR<>LCCOLOR .Or. LOOCX.SELFONTNAME<>LCFONT .Or. LOOCX.SELFONTSIZE<>LNFONTSIZE .Or. LOOCX.SELALIGNMENT<>LNALIGN
If LOOCX.SELCHAROFFSET>=0
If LLSUBSCRIPT
LCHTML = LCHTML+"</sub>"
Endif
Endif
If LOOCX.SELCHAROFFSET<=0
If LLSUPERSCRIPT
LCHTML = LCHTML+"</sup>"
Endif
Endif
If LOOCX.SELSTRIKETHRU<>LLSTRIKED
If LLSTRIKED
LCHTML = LCHTML+'</del>'
Endif
Endif
If LOOCX.SELUNDERLINE<>LLUNDERLINE
If LLUNDERLINE
LCHTML = LCHTML+"</u>"
Endif
Endif
If LOOCX.SELITALIC<>LLITALIC
If LLITALIC
LCHTML = LCHTML+"</i>"
Endif
Endif
If LOOCX.SELBOLD<>LLBOLD
If LLBOLD
LCHTML = LCHTML+"</b>"
Endif
Endif
If .Not. LLSTYLECHANGE
If LLHIGHLIGHT .And. Atc('\highlight', LOOCX.SELRTF)>0
LNCURHIGHLIGHTINDEX = Val(Strextract(LOOCX.SELRTF, '\highlight', ' '))
LNRTFCOLORS = This._GET_COLORTBL(Strextract(LOOCX.SELRTF, '{\colortbl ;', '}', 1), @LACOLORTBL)
If .Not. LCCURHIGHLIGHTCOLOR=LACOLORTBL(LNCURHIGHLIGHTINDEX, 2)
LCHTML = LCHTML+Iif( .Not. Empty(LCCURHIGHLIGHTCOLOR), '</span>', "")
LLHIGHLIGHT = .F.
Endif
Endif
If LLHIGHLIGHT<>(Atc('\highlight', LOOCX.SELRTF)>0)
If .Not. LLHIGHLIGHT
LNCURHIGHLIGHTINDEX = Val(Strextract(LOOCX.SELRTF, '\highlight', ' '))
LNRTFCOLORS = This._GET_COLORTBL(Strextract(LOOCX.SELRTF, '{\colortbl ;', '}', 1), @LACOLORTBL)
If LNCURHIGHLIGHTINDEX>0 .And. LNCURHIGHLIGHTINDEX<=LNRTFCOLORS
LCHTML = LCHTML+'<span style="background-color: '+LACOLORTBL(LNCURHIGHLIGHTINDEX, 1)+'">'
LCCURHIGHLIGHTCOLOR = LACOLORTBL(LNCURHIGHLIGHTINDEX, 2)
Endif
LLHIGHLIGHT = .T.
Endif
If LLHIGHLIGHT .And. Atc('\highlight', LOOCX.SELRTF)=0
LCHTML = LCHTML+'</span>'+Replicate('</span>', LNDANGLINGSPAN)
LLHIGHLIGHT = .F.
LNDANGLINGSPAN = 0
Endif
Endif
Else
If LLBOLD .And. LOOCX.SELBOLD
LCHTML = LCHTML+"</b>"
LLBOLD = .F.
Endif
If LLITALIC .And. LOOCX.SELITALIC
LCHTML = LCHTML+"</i>"
LLITALIC = .F.
Endif
If LLUNDERLINE .And. LOOCX.SELUNDERLINE
LCHTML = LCHTML+"</u>"
LLUNDERLINE = .F.
Endif
If LLSTRIKED .And. LOOCX.SELSTRIKETHRU
LCHTML = LCHTML+'</del>'
LLSTRIKED = .F.
Endif
LCHTML = LCHTML+Iif(LLHIGHLIGHT, "", "</span>")
LNDANGLINGSPAN = LNDANGLINGSPAN+Iif(LLHIGHLIGHT, 1, 0)
If LOOCX.SELALIGNMENT<>LNALIGN
LCALIGN = Icase(LOOCX.SELALIGNMENT=0, 'Left', LOOCX.SELALIGNMENT=1, 'Right', LOOCX.SELALIGNMENT=2, 'Center', 'Left')
LCHTML = LCHTML+'</div><div align="'+LCALIGN+'">'
Endif
LCHTML = LCHTML+'<span style="font-family: '+LOOCX.SELFONTNAME+'; font-size: '+Transform(LOOCX.SELFONTSIZE)+'pt; color: '+LCSHARP+LCTMPCOLOR+'">'
If LLHIGHLIGHT .And. Atc('\highlight', LOOCX.SELRTF)>0
LNCURHIGHLIGHTINDEX = Val(Strextract(LOOCX.SELRTF, '\highlight', ' '))
LNRTFCOLORS = This._GET_COLORTBL(Strextract(LOOCX.SELRTF, '{\colortbl ;', '}', 1), @LACOLORTBL)
If .Not. LCCURHIGHLIGHTCOLOR=LACOLORTBL(LNCURHIGHLIGHTINDEX, 2)
LCHTML = LCHTML+Iif( .Not. Empty(LCCURHIGHLIGHTCOLOR), '</span>', "")
LLHIGHLIGHT = .F.
Endif
Endif
If LLHIGHLIGHT<>(Atc('\highlight', LOOCX.SELRTF)>0)
If .Not. LLHIGHLIGHT
LNCURHIGHLIGHTINDEX = Val(Strextract(LOOCX.SELRTF, '\highlight', ' '))
LNRTFCOLORS = This._GET_COLORTBL(Strextract(LOOCX.SELRTF, '{\colortbl ;', '}', 1), @LACOLORTBL)
If LNCURHIGHLIGHTINDEX>0 .And. LNCURHIGHLIGHTINDEX<=LNRTFCOLORS
LCHTML = LCHTML+'<span style="background-color: '+LACOLORTBL(LNCURHIGHLIGHTINDEX, 1)+'">'
LCCURHIGHLIGHTCOLOR = LACOLORTBL(LNCURHIGHLIGHTINDEX, 2)
Endif
LLHIGHLIGHT = .T.
Endif
If LLHIGHLIGHT .And. Atc('\highlight', LOOCX.SELRTF)=0
LCHTML = LCHTML+'</span>'
LLHIGHLIGHT = .F.
Endif
Endif
Endif
If .Not. LLBULLET .And. LOOCX.SELBULLET
LCHTML = LCHTML+'<li>'
LLBULLET = LOOCX.SELBULLET
Else
If LLBULLET .And. .Not. LOOCX.SELBULLET
LLBULLET = LOOCX.SELBULLET
Endif
Endif
If LOOCX.SelText=Chr(10) .Or. Len(LOOCX.SelText)=0
LCHTML = LCHTML+"<br />"+Chr(13)+Chr(10)
LLBULLET = .F.
LNCHARINDEX = LNCHARINDEX+1
Endif
If LOOCX.SELBOLD<>LLBOLD
If LOOCX.SELBOLD
LCHTML = LCHTML+"<b>"
Endif
Endif
If LOOCX.SELITALIC<>LLITALIC
If LOOCX.SELITALIC
LCHTML = LCHTML+"<i>"
Endif
Endif
If LOOCX.SELUNDERLINE<>LLUNDERLINE
If LOOCX.SELUNDERLINE
LCHTML = LCHTML+"<u>"
Endif
Endif
If LOOCX.SELSTRIKETHRU<>LLSTRIKED
If LOOCX.SELSTRIKETHRU
LCHTML = LCHTML+'<del>'
Endif
Endif
If LLSUBSCRIPT<>(LOOCX.SELCHAROFFSET<0)
If LOOCX.SELCHAROFFSET<0
LCHTML = LCHTML+"<sub>"
Endif
Endif
If LLSUPERSCRIPT<>(LOOCX.SELCHAROFFSET>0)
If LOOCX.SELCHAROFFSET>0
LCHTML = LCHTML+"<sup>"
Endif
Endif
If Len(LOOCX.SelText)>0
If Atc("\ul\", LOOCX.SELRTF)>0 .And. Atc(Substr(LOOCX.Text, LNCHARINDEX+1), ">")>0
If Atc(Substr(LOOCX.Text, LNCHARINDEX+1), ">")<Atc(Substr(LOOCX.TEXTRTF, LNCHARINDEX+1), "\ulnone")
LNENDLINK = Atc(Substr(LOOCX.Text, LNCHARINDEX+1), ">")
LNSTARTLINK = Atc(Substr(LOOCX.Text, LNCHARINDEX+1), "<")
For LINDEX = LNCHARINDEX To LNENDLINK
LOOCX.SelStart = (LINDEX-1)
LOOCX.SelLength = 1
If Atc("\ul\", LOOCX.SELRTF)<=0
Exit
Endif
Endfor
LOOCX.SelStart = (LNCHARINDEX-1)
LOOCX.SelLength = 1
If LINDEX=LNLOOP
LCTMPLINK = Substr(LOOCX.Text, LNCHARINDEX, LNENDLINK-LNCHARINDEX)
LCTMPLINK = Substr(LCTMPLINK, Atc("<", LCTMPLINK)+1)
LCHTML = LCHTML+'<a href="'+LCTMPLINK+'" target = "_blank">'+Substr(LOOCX.Text, LNCHARINDEX, LNSTARTLINK-LNCHARINDEX)+'</a>'
Endif
Endif
Else
If LOOCX.SelText="?" .And. Atc(" ?}", LOOCX.SELRTF)=0
If Atc("\'", LOOCX.SELRTF)>0
LCCODEASCII = Strextract(LOOCX.SELRTF, "\'", ")", 1)
LCCODEASCII = "&h0"+LCCODEASCII
Else
LCCODEASCII = Substr(LOOCX.SELRTF, Atc("?}", LOOCX.SELRTF)-5, 5)
Endif
LCHTML = LCHTML+"&#"+Transform(Val(LCCODEASCII))+";"
LNCHARINDEX = LNCHARINDEX+1
Else
LCCURCHAR = LOOCX.SelText
Do Case
Case LCCURCHAR="<"
LCHTML = LCHTML + [<]
Case LCCURCHAR=">"
LCHTML = LCHTML + [>]
Case LCCURCHAR='"'
LCHTML = LCHTML + ["]
Case Inlist(LCCURCHAR, Chr(13), Chr(10))
Case LCCURCHAR=" "
If Right(LCHTML, 1)=" "
LCHTML = Left(LCHTML, Len(LCHTML) - 1) + " "
Else
If Right(LCHTML, 6) = " " Or LOOCX.SelStart < 1
LCHTML = LCHTML + " "
Else
LCHTML = LCHTML+" "
Endif
Endif
Otherwise
LCHTML = LCHTML+LCCURCHAR
Endcase
Endif
Endif
Endif
LCCOLOR = Right("000000"+Substr(Transform(LOOCX.SELCOLOR, "@0"), 3), 6)
LCCOLOR = Right(LCCOLOR, 2)+Substr(LCCOLOR, 3, 2)+Left(LCCOLOR, 2)
LLBOLD = LOOCX.SELBOLD
LLITALIC = LOOCX.SELITALIC
LLUNDERLINE = LOOCX.SELUNDERLINE
LLSTRIKED = LOOCX.SELSTRIKETHRU
LLSUBSCRIPT = LOOCX.SELCHAROFFSET<0
LLSUPERSCRIPT = LOOCX.SELCHAROFFSET>0
LCFONT = LOOCX.SELFONTNAME
LNFONTSIZE = LOOCX.SELFONTSIZE
LNALIGN = LOOCX.SELALIGNMENT
LCALIGN = Icase(LOOCX.SELALIGNMENT=0, 'Left', LOOCX.SELALIGNMENT=1, 'Right', LOOCX.SELALIGNMENT=2, 'Center', 'Left')
This.AFTER_CHARACTER(LNCHARINDEX)
Enddo
LCHTML = LCHTML+Iif(LLSTRIKED, '</del>', "")+Iif(LLBOLD, "</b>", "")+Iif(LLITALIC, "</i>", "")+Iif(LLUNDERLINE, "</u>", "")
LCHTML = LCHTML+'</span></div>'
LOOCX.SelStart = LNORIGSTART
LOOCX.SelLength = LNORIGLENGTH
Else
LCHTML = ""
Endif
Return LCHTML
--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú