Hola mantonio
Luego de recibir todas las ayudas de los amigos que respondieron en el este Post mas alguito de lectura desarrolle esta rutina que te abre un cuadro de dialogo y te permite hacer una edicion simple con el uso de Richedit,, como veras hau dos funciones cRTF_FileMime(xTextoMiMe) y otra.. SaveRTF_FileMime(oRich) que me permiten crear archivos temporales de trabajo para guardar el valor del campo binario a uno de texto ,, , pues yo uso Mysql y es necesario hacerlo.. pero si estas usando directamente Dbf.. por lo que me comentaron puedes hacer directamente el REPLACe al Campo
Espero que te sirva
Lubin
FUNCTION WMEMO_WORD(XCAMPO,XEDITA,XTITULO,XOBS)
- XCAMPO ... es el campo a editar
- XEDITA ... Si es .F. no se puede modificar el campo solo se muestra
XTITULO .. Titulo del cuadro de dialogo
XOBS... Observaciones en el cuadro de dialogo
*FUNCION RETORNA ====>> EL VALOR DEL CAMPO EDITADO ...
local oDlg
local oRich
local hRichDLL := LoadLibrary( "riched20.dll" )
local lSyntaxHL := .F.
local xtexto_ant:=xCampo
local xtexto:=""
local z_ok:=.f.
LOCAL oDedo
LOCAL S_oTit1Font1
LOCAL S_oTit1Font2
Local S_oTit1Text
LOCAL S_cTit1Text := xtitulo
LOCAL oNOTA ,XNOTA :=""
LOCAL xfile_i_tmp:="c:\windows\my$$fwh_i.rtf"
LOCAL xfile_o_tmp:="c:\windows\my$$fwh_o.rtf"
IF XTITULO=NIL
XTITULO="Registro de Notas "
S_cTit1Text := xtitulo
ENDIF
IF .NOT. EMPTY(XOBS)
XNOTA="Nota : " +XOBS
ENDIF
IF XEDITA=NIL
XEDITA=.F.
ENDIF
IF XEDITA=NIL
XEDITA:=.T.
ENDIF
xTexto:=xCampo
- Carga del Campo
xfile_i_tmp:="c:\windows\my$$fwh_i.rtf"
xfile_o_tmp:="c:\windows\my$$fwh_o.rtf"
DEFINE CURSOR oDedo RESOURCE "Dedo"
DEFINE FONT S_oTit1Font1 NAME "Roman" SIZE 10, 20
DEFINE FONT S_oTit1Font2 NAME "Roman" SIZE 8, 8
DEFINE DIALOG oDlg NAME "WMEMO_WORD"
REDEFINE SAY S_oTit1Text VAR S_cTit1Text ID 601 OF oDlg FONT S_oTit1Font1
REDEFINE SAY oNOTA VAR XNOTA ID 201 OF oDlg FONT S_oTit1Font2
oRich = TRichEdit():Redefine( 101, { || "" }, oDlg )
oRich:LoadFromRTFFile(cRTF_FileMime(xCampo)) && Lee el archivo temporal decodificado en Valor RTF,
oRich:lHighLight = .F. && Apagamos deshabilitado vizaulizacion de efectos
oRich:lReadOnly := .NOT. XEDITA && Controla si se puede editar el Campo
oRich:SetFocus()
* oRich:bGotFocus:= {||oRich:SetBkGndColor(nRGB(0,100,250)) }
* oRich:bLostFocus:= {||oRich:SetBkGndColor(nRGB(255,255,255)) }
REDEFINE BUTTON ID 8011 ACTION (Z_OK:=.T.,xfile_o_tmp:=SaveRTF_FileMime(oRich) , oDlg:End())
* Este bonton Graba del Valor del GetRTF a un File Temporal ArchivoRtfMime, para que pueda ser guardado en Cmapo Mysql
REDEFINE BUTTON ID 8012 ACTION (Z_OK:=.F., oDlg:End())
REDEFINE BUTTON ID 8022 ;
ACTION oRich:SaveToRTFFile( cGetFile( "RTF file (.rtf) | .rtf", "Ingrese el Nombre del Archivo a Grabar", "MyDocum" ) )
REDEFINE BUTTON ID 8023 ;
ACTION oRich:LoadFromRTFFile( cGetFile( "RTF file (.rtf) | .rtf" ) )
ACTIVATE DIALOG oDlg CENTERED && ON INIT (oRich:LoadAsRTF(xCampo)) && , oRich:AutoURLDetect( .t. ))
IF Z_OK && Se grabo bien...
xtexto:=memoread(xfile_o_tmp) && Se lee el Archivo Temporal MiMe conveertido para ser guardado en campo MySql
ENDIF
FreeLibrary( hRichDLL )
return xtexto
Function cRTF_FileMime(xTextoMiMe)
*Funcion que recibe un Texto Mime y debuelve el Nombre del Archivo donde fue grabado el Archivo RTF decodificado
LOCAL xfile_i_tmp:=cTempFile(GetEnv("TEMP"),"RTF") && "c:\windows\my$$fwh_i.rtf"
LOCAL xfile_o_tmp:=cTempFile(GetEnv("TEMP"),"RTF") && "c:\windows\my$$fwh_o.rtf"
memowrit(xfile_i_tmp,xTextoMime) && Grabamos el Campo en un archivo temporal
fmimeDec(xfile_i_tmp,xfile_o_tmp) && Convertimos el Archivo MIME a File RTF para ser cargado al Get
erase(xFile_i_tmp)
RETURN xfile_o_tmp && Devolvemos nombre del FileMimeRTf donde se grabo el Archivo RTF
Function SaveRTF_FileMime(oRich)
Funcion para guardar el valor RTF del richEdit en un Archivo con formato Mime para guardarlo en un campo Mysql
Retorna ... el Nombre del archivo para que sea leido con un memoread y grabado en campo Mysql
LOCAL xfile_i_tmp:=cTempFile(GetEnv("TEMP"),"DBF") && "c:\windows\my$$fwh_i.rtf"
LOCAL xfile_o_tmp:=cTempFile(GetEnv("TEMP"),"DBF") && "c:\windows\my$$fwh_o.rtf"
oRich:SaveToRTFFile(xfile_i_tmp)
fmimeenc(xfile_i_tmp,xfile_o_tmp)
RETURN xfile_o_tmp
AQUI ESTA EL CONTENIDO DEL RC... que usa
WMEMO_WORD DIALOG LOADONCALL MOVEABLE DISCARDABLE 38, 58, 546, 212
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "EDITOR MEMOS"
FONT 8, "Arial"
{
ICON "W_NOTA", -1, 10, 10, 21, 18
LTEXT "", 601, 36, 12, 334, 17
PUSHBUTTON "Exportar (Rtf)", 8022, 435, 197, 48, 12
PUSHBUTTON "Importar (Rtf)", 8023, 488, 196, 50, 13
PUSHBUTTON "Grabar ", 8011, 12, 196, 68, 13
PUSHBUTTON "Salir ", 8012, 96, 196, 62, 14
CONTROL "", 101, "RichEdit20A", 4100 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 30, 37, 482, 148
LTEXT "", 201, 165, 196, 264, 13
}
ESTE ES EL ICONO "W_NOTA"
W_NOTA ICON LOADONCALL MOVEABLE DISCARDABLE
{
'00 00 01 00 02 00 20 20 10 00 00 00 00 00 E8 02'
'00 00 26 00 00 00 10 10 10 00 00 00 00 00 28 01'
'00 00 0E 03 00 00 28 00 00 00 20 00 00 00 40 00'
'00 00 01 00 04 00 00 00 00 00 00 02 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 80 00 00 80 00 00 00 80 80 00 80 00'
'00 00 80 00 80 00 80 80 00 00 80 80 80 00 C0 C0'
'C0 00 00 00 FF 00 00 FF 00 00 00 FF FF 00 FF 00'
'00 00 FF 00 FF 00 FF FF 00 00 FF FF FF 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 03 88 87 38 33 77 00 00 00 00 00 00 00'
'00 00 38 FB FF FB 78 8B 88 37 70 00 00 00 00 00'
'07 88 FB FF FB FF F7 FF 8B 88 83 70 00 00 00 00'
'07 FB FF FB FF FB FF 7B FF FB 88 87 00 00 00 00'
'00 7F FB FF FB FF FB 7F FB FF FB F3 70 00 00 00'
'00 07 FF FB FF FB FF F7 FF FB FF 77 77 00 00 00'
'00 07 FB FF FB FF FB F7 FB 77 77 FF F8 00 00 00'
'00 00 7F FB FF FB FF F7 77 FB FF FB F8 00 00 00'
'00 00 7B FF FB FF FB FF FB FF FB FF F8 00 00 00'
'00 00 07 FB FF FB FF FB FF FB FF FB F8 00 00 00'
'00 00 07 FF FB FF FB FF FB FF FB FF F8 00 00 00'
'00 00 00 00 0F FB FF FB FF FB FF FB F8 00 00 00'
'00 00 06 66 60 FF FB FF FB FF FB FF F8 00 00 66'
'60 00 06 66 60 FB FF FB FF FB FF FB F8 00 06 66'
'66 00 00 06 66 0F FB FF FB FF FB FF F8 00 0E 66'
'66 06 66 60 66 0F FF FF FF FB FF FB F8 00 0E 66'
'66 06 66 60 66 00 00 00 0F FF FB FF F8 00 0E E6'
'66 06 66 60 66 07 77 77 77 FB FF FB F8 00 0E E6'
'66 0E EE E6 66 0F FB FF FB FF FB FF F8 00 00 EE'
'E0 77 0E 66 60 FB FF FB FF FB FF FB F8 00 00 00'
'00 00 0E EE 60 FF FB FF FB FF FB FF F8 00 00 00'
'00 00 00 00 0F FB FF FB FF FB FF FB F8 00 00 00'
'00 00 07 FF FB FF FB FF FB FF FB FF F8 00 00 00'
'00 00 07 FB FF FB FF FB FF FB FF FB F8 00 00 00'
'00 00 07 FF FB FF FB FF FB FF FB FF F8 00 00 00'
'00 00 07 FB FF FB FF FB FF FB FF FB F8 00 00 00'
'00 00 07 77 77 77 77 77 77 77 77 77 77 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF'
'FF FF FF FF FF FF FF E0 03 FF FF 00 00 7F FC 00'
'00 1F F8 00 00 0F F8 00 00 07 FC 00 00 03 FE 00'
'00 01 FE 00 00 01 FF 00 00 01 FF 00 00 01 FF 80'
'00 01 FF 80 00 01 FF 80 00 01 C7 00 00 01 83 00'
'00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00'
'00 01 00 00 00 01 80 00 00 01 C7 00 00 01 FF 80'
'00 01 FF 80 00 01 FF 80 00 01 FF 80 00 01 FF 80'
'00 01 FF 80 00 01 FF FF FF FF FF FF FF FF 28 00'
'00 00 10 00 00 00 20 00 00 00 01 00 04 00 00 00'
'00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 80'
'00 00 00 80 80 00 80 00 00 00 80 00 80 00 80 80'
'00 00 C0 C0 C0 00 80 80 80 00 00 00 FF 00 00 FF'
'00 00 00 FF FF 00 FF 00 00 00 FF 00 FF 00 FF FF'
'00 00 FF FF FF 00 00 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 00 08 7B 77 08 88 00 00 00 08'
'FF FB F0 B7 88 00 00 00 8B FF FB 0F B7 80 00 00'
'8F FB FF 0F 00 80 00 00 08 FF FB 80 FB 70 00 00'
'00 0B FF FB FF 70 00 00 06 60 FB FF FB 70 06 60'
'00 60 FF FB FF 70 0E 60 E0 60 00 FF FB 70 0E E0'
'0E E0 FF FB FF 70 00 00 00 0F FB FF FB 70 00 00'
'08 FB FF FB FF 70 00 00 08 88 88 88 88 80 00 00'
'00 00 00 00 00 00 FF FF 00 00 F0 0F 00 00 E0 03'
'00 00 E0 01 00 00 F0 00 00 00 F0 00 00 00 F8 00'
'00 00 F8 00 00 00 90 00 00 00 00 00 00 00 00 00'
'00 00 00 00 00 00 98 00 00 00 F8 00 00 00 F8 00'
'00 00 FF FF 00 00'
}