Este código trabaja con el ocx de texto enriquecido mas conocido como richtext, como veras hace referencia al objeto ocx y cada uno de sus elementos, por eso lo uso con la barra de herramientas de richtext, te adjunto el código y la clase que contiene el código para que lo puedas emplear junto con tu objeto ocx richtext
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
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
en este caso lo uso para enviar correos con cdo, el texto enriquecido lo paso a htlm y llega casi tal cual, obviamente que no puede insertar imágenes en el resultado htlm, pero por lo demás tu texto sera 95-99% igual.