Para hacer pruebas hice este código pero por alguna razón no funciona como debiera.
La idea es guardar un texto RTF en el memo de una DBF, pero, para evitar que el RTF sea leído si hubo corrupcion de datos en el memo (a veces suele pasar que en un memo están los datos de otro), intento agregarle el recno() y un par de caracteres "/*/" al RTF cuando es guardado en el memo.
Esto lo hace aparentemente bién, pero al recuperarlo, el texto en el richedit no sale, sólo está en blanco.
Adjunto el código. Gracias.
- Code: Select all Expand view RUN
#include "Fivewin.ch"
#include "richedit.ch"
external dbfcdx
REQUEST ordkeyno, ordkeycount, ordkeygoto
REQUEST DBFCDX, DBFFPT
function Reditoold // en cMemo entro el memo a editar
# define fondo1 nrgb(236,226,202)
# define fondo3 nrgb(236,226,232)
local oDlg, oRich, cText, cMemo , cVar ,oSay, cDisk, cDir
local cMemoRich // rtf creado a partir del contenido del memo
local cRTFaMEMO // el contenido del rich guardado como RTF en
//cRTFaMEMO para luego ponerlo en el memo
local cRTF
local hRichDLL := LoadLibrary( "riched20.dll" )
local cAlias:=cGetNewAlias('richi')
set resources to "richrolo.dll"
use TRABAJOS shared new alias (cAlias)
(cAlias)->(ordsetfocus(1) , dbgotop())
define font oFont name "arial" size -5,-12 bold
define dialog oDlg resource "rich" ;
color nrgb(0,0,0) , fondo3
redefine richedit oRich var cText id 4001 of oDlg;
font oFont
REDEFINE BUTTON ID 4003 ; //leo el rtf guardado en el memo
//y lo paso al editor
action (cRTF:=PasoRTFdesdeMemo(cAlias,"REPARACION",recno()) , ;
msginfo(cRTF) , cMemoRich:=oRich:LoadAsRtf(cRTF) , ;
oRich:SetText(cMemoRich)) //
REDEFINE BUTTON ID 4004 ; // guardo lo que tengo en editor,
//al campo memo con formato rtf
action (cRTFaMEMO:=oRich:SaveAsRTF(cText) , ;
GuardoRTFenMemo(cAlias,"REPARACION",cRTFaMEMO,recno()) )
ACTIVATE DIALOG oDlg CENTERED on init oRich:SetText((cAlias)->REPARACION)
FreeLibrary( hRichDLL )
return nil
//----------------------------------------------------------------------------------------------------------------------------------
Function GuardoRTFenMemo(cAlias,cMemo,cRTFaMEMO,nRecord)
// en esta funcion guarda el RTF en el memo
// indicado agragandole el recno()
// para poder luego controlar que coincida ciando
// se carge así evito leer
// errores si el meo se corrompió
IF &cAlias.->(DBRLOCK())
REPLACE &cAlias.->&cMemo. WITH (alltrim(str(nRecord)) + "/*/" + cRTFaMEMO)
&cAlias.->(DBCOMMIT())
&cAlias.->(DBUNLOCK())
return .t.
else
msginfo("NO SE PUDO BLOQUEAR DBF, NO SE GUARDÖ EL RTF")
return .f.
endif
return nil
//----------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------
Function PasoRTFdesdeMemo(cAlias,cMemo,nRecno) // en esta funcion leo el
// memo y le saco el recno.
//si no coincide con el recno(),
// informo y leo espacios
// vacios. Si coincide, le saco
//el recno
// y las "/*/" y devuelvo el rtf
local cMemoRich , nPosi , cRecno , cMemoRTFListo
cMemoRich:=&cAlias.->&cMemo.
nPosi := at("/*/",cMemoRich)
if nPosi > 0
cRecno:=substr(cMemoRich,1,(nPosi-1))
else
msginfo("El memo está alterado")
return nil
endif
if int(val(cRecno)) <> nRecno
msginfo("El memo está alterado")
return nil
else
msginfo(str(nPosi))
cMemoRTFListo := substr(cMemoRich,(nPosi+3),(len(cMemoRich)-(nPosi+2)) )
msginfo(cMemoRTFListo)
return cMemoRTFListo
endif
return nil