PDA

Ver la Versión Completa : Problemas con RichEdit


Ermek
08-09-2005, 12:49:42
Buenas. Necesito guardar en una base de datos el texto de un editor realizado con RichEdit. Pero el problema es que lo guarda sin formato.

El código que pongo es el siguiente:


Editor.PlainText:=True;
Query2.Edit;
Query2.FieldByName('TEXTO').AsString:=Editor.Text;
Query2.Post;
Editor.SetFocus;

Pero, parece que no hace caso al PlainText.

dec
08-09-2005, 13:02:36
Hola,

¿No es al revés? ¿No estás indicando con "PlainText = True" que lo guarde como texto plano, es decir, sin formato?

Ermek
08-09-2005, 14:17:57
He probado con Plaintext:=False y también pasa lo mismo.

dec
08-09-2005, 14:40:10
Hola,

Terminará pasando lo mismo, es decir, que al cabo no consigas lo que quieres, pero, desde luego, esto es lo que puede leerse en la descripción de la propiedad "PlainText" en la ayuda de Delphi, la cual, por cierto, tal vez te proporcione alguna idea:


To write the rich text in the control to a plain text file, set PlainText to true before streaming the text to a file. To ignore the rich text information encoded in a file, set PlainText to true before streaming the text to the control. To stream in the rich text attributes encoded in a file, or save the encoding of the rich text attributes to a file, set PlainText to false.

If the rich text attributes of a file are encoded in some format other than rich text format (RTF), it is necessary to use a converter on the text, even when PlainText is true.

Note: Rich edit controls do not directly support streaming. Use the Lines property to stream to or from a file.

jmariano
08-09-2005, 15:02:16
El problema no se encuentra en usar o no la propiedad "PlainText", sino en el uso de la propiedad "Text", la cual sólo devuelve la cadena de texto introducida ignorando toda información sobre el formato de dicha cadena.

Para poder almacenar el texto junto con el formato es necesario leer el "contenido" en sí del control (es decir, el "Stream"). Para no enrollarme mucho, pongo un ejemplo:


procedure TForm1.Button1Click(Sender: TObject);
var
CadenaFmt: TStringStream;
begin
CadenaFmt := TStringStream.Create('');

with RichEdit1 do
begin
// Ejecutar primero con PlainText a False y después a True

SelAttributes.Color := clRed;
SelAttributes.Style := [fsBold];
SelText := 'Hola';
Lines.SaveToStream(CadenaFmt);
end;

ShowMessage(CadenaFmt.DataString);
CadenaFmt.Free;
end;


Si probais el ejemplo, vereis que se muestra un mensaje con la cadena de texto introducida mas las "etiquetas" utilizadas para dar formato a dicho texto. Si ahora lo ejecutais de nuevo poniendo la propiedad "PlainText" a "True", vereis que el mensaje muestra el texto normal sin dichas "etiquetas". Es decir, "PlainText" solo afecta a como será almacenado el texto del control (a la hora de usar los métodos "SaveToFile" o "SaveToStream"), con formato o sin él.

Saludos!

dec
08-09-2005, 17:46:55
Hola,

Bueno, jmariano, creo que lo que has explicado es bastante explícito, pero, si se quiere guardar el texto con el formato (haciéndolo como tú lo has planteado arriba, no utilizando la propiedad "Text" del "TRichEdit", sencillamente), la propiedad "PlainText" ha de valer "False", ¿es o no es? ;)

jmariano
08-09-2005, 19:38:00
Hola,

Bueno, jmariano, creo que lo que has explicado es bastante explícito, pero, si se quiere guardar el texto con el formato (haciéndolo como tú lo has planteado arriba, no utilizando la propiedad "Text" del "TRichEdit", sencillamente), la propiedad "PlainText" ha de valer "False", ¿es o no es? ;)

Exastamente! para guardar el texto con formato la propiedad "PlainText" ha de ser "False". Pero, ojo!, como ya expliqué, la propiedad "Text" siempre devuelve el texto sin formato, independientemente de que la propiedad "PlainText" esté a "True" o "False".

Saludos!

Ermek
09-09-2005, 10:16:07
Gracias, de esa forma si me funciona.


Saludos.