Siguiendo los consejos de Antonio, le di una mirada a la control RichEdit y realmente tenias razon, es muy interasante y facil su implementacion reemplazandolo por un get Memo..
He podido ver como grabar el texto editado a un ARCHIVO xxx.Rtf y como leerlo, impresionantemente facil.
Ahora tengo dos consultas..
1. El punto ahora es como guardar este texto a un campo memo (en el caso de usar un dbf. ) y luego com recuperarlo para continuar su edicion.
2. Para los amigos que usan Mysql, la idea es guardarlo en una Tabla de Mysql, en un campo tipo Blog segun tengo entendido es el adecuado, como puedo guardarlo y luego recuperarlo para continuar su edicion???
Para mi la forma mas facil fue convertir el rtf con mime64 y guardarlo en un campo mediumtext, luego lo lees y vuelves a transformas al formato original y listo.
Ahora... la pregunta que me surge es... y como convierto el formato rtf a un formato mime64, existe alguna funcion o algun ejemplo ??
teniendo presente q estoy haciendo la edicion usando la control RichEdit como saco el valor editado de esa clase... lo paso al convertidor y luego grabarlo..
Gracias por tu respuesta ...
Lautaro wrote:Lubin,
Para mi la forma mas facil fue convertir el rtf con mime64 y guardarlo en un campo mediumtext, luego lo lees y vuelves a transformas al formato original y listo.
Unas connsultas si no es molestia ...
1. En este caso estariamos tomando el archivo Rtf como si fuese una imagen ?? y ejecuto el procesoo que me indicass ??
2. Por casualidad sabes como jalarias el valor digitado del la clase control RichEdit para pasarlo directamente a la variable del Eagle1 sin tener q grabar el archivo xxx.rtf??
3. en este ejemplo las funciones ClearImage() es del fivewin ??
Gracias Willi
Lubin
Willi Quintana wrote:En MySQL con Eagle1 lo hago asi:
Salu2
para almacenar
...
..
.
If MsgNoyes("Almacenar la Imagen Seleccionada?","Confirme")
ClearImage(oImagen)
oImagen:LoadBmp(cImagen)
oImagen:Refresh()
aplicare lo comentado por Ti y Lautaro ,, titne sentidoo
muchas gracias
Lubin
Willi Quintana wrote:Lubin, Lautaro tiene razon, "levanta" el archivo .rtf en una variable con el Memoread()... y zas.... el ejemplo que puse serviria...
Hasta ahora tengo buenas experiencias trabajado con controles rtf en un campo memo, un poquito de experiencia:
1. El punto ahora es como guardar este texto a un campo memo (en el caso de usar un dbf. ) y luego com recuperarlo para continuar su edicion.
Guardar texto .rtf en un campo memo es tan sencillo como esto:
REPLACE DATOS WITH cDatos
La lectura de los datos la puedes hacer así: primero, lees el campo memo como siempre (cDatos será mi variable y DATOS el nombre del campo memo, oRTF un contro rtf):
cDatos=DATOS
Luego para cargarlo dentro de un control rtf debes hacer lo siguiente:
oRTF:LoadAsRTF(cDatos)
oRTF:SetText(cDatos)
Para grabar los datos modificados en un control rtf
Creo que con esto ya _ tenemos cerrado el circulo del manejo del control para los archivos rtf (archivos que me permiten editar textos con efectos de edicion... eso semanas atras no lo sabia.. ) , tal vez por ahi se nos escape algo pero creo que estos datos son interesantes para todos.
Quizas me gustaria comentarles que para la implementacion con el estimado editor de recursos de workshop segui los siguientes pasos..
1, he crear un control tipo "control custom"
2. Le he puesto los siguientes paramentros..
en ID : nuestro clasico numero Id que dentifica el control
Class : "RichEdit20A"
Style : 4100 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP
y nada mas..
Espero estar hacendo bien.. bueno al menos me esta funcionando.. salvo que alguien tenga algun Tip mas
Lubin
fespinoza wrote:Lubin
Hasta ahora tengo buenas experiencias trabajado con controles rtf en un campo memo, un poquito de experiencia:
1. El punto ahora es como guardar este texto a un campo memo (en el caso de usar un dbf. ) y luego com recuperarlo para continuar su edicion.
Guardar texto .rtf en un campo memo es tan sencillo como esto:
REPLACE DATOS WITH cDatos
La lectura de los datos la puedes hacer así: primero, lees el campo memo como siempre (cDatos será mi variable y DATOS el nombre del campo memo, oRTF un contro rtf):
cDatos=DATOS
Luego para cargarlo dentro de un control rtf debes hacer lo siguiente:
oRTF:LoadAsRTF(cDatos)
oRTF:SetText(cDatos)
Para grabar los datos modificados en un control rtf
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" ) )
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