Suponiendo que se quiere copiar el contenido de un componente TRichEdit llamado Caja1 a otro llamado Caja2, con todo el formato que el texto tenga, ninguna de las siguientes sentencias sirven para ello:
Código Delphi
[-]
Caja2.Assign (Caja1);
Caja2.Text := Caja1.Text;
Caja2.Lines.Assign (Caja1.Lines);
Caja2.Lines := Caja1.Lines;
Caja2.SetTextBuf (PChar (Caja1.Text));
Caja2.Lines.Text := Caja1.Lines.Text;
Copian el texto, pero sin su formato.
En la biblioteca BPDGH, fueron creadas algunas funciones que permiten solventar este problema:
- TextoGuarListCade (Texto que Guarda Lista de Cadenas).
- CargaTextListCade (Cargar Texto en Lista de Cadenas).
- TextoGuarTRichEdit (Texto que Guarda TRichEdit).
- CargaTextTRichEdit (Cargar Texto en TRichEdit).
De tal forma que cuando se quiere copiar el texto de una caja TRichEdit a otra, se puede usar alguna de estas dos sentencias:
Código Delphi
[-]
CargaTextListCade (Caja2.Lines, TextoGuarListCade (Caja1.Lines));
CargaTextTRichEdit (Caja2, TextoGuarTRichEdit (Caja1));
He aquí la implementación que tienen esas cuatro funciones en la biblioteca BPDGH:
Código Delphi
[-]
Function CargaTextListCade (Const Lista :TStrings; Const Texto :String) :Boolean;
Var
FlujAuxi :TStringStream;
Begin
If LimpiBooleanPuntNulo (Result, Lista) Then
Exit;
FlujAuxi := TStringStream.Create (Texto);
Try
Lista.LoadFromStream (FlujAuxi);
Finally
FlujAuxi.Free;
End;
End;
Function TextoGuarListCade (Const Lista :TStrings) :String;
Var
FlujAuxi :TStringStream;
Begin
If LimpiCadePuntNulo (Result, Lista) Then
Exit;
FlujAuxi := TStringStream.Create ('');
Try
Lista.SaveToStream (FlujAuxi);
Result := FlujAuxi.DataString;
Finally
FlujAuxi.Free;
End;
End;
Function CargaTextTRichEdit (Const Caja :TRichEdit; Const Texto :String) :Boolean;
Begin
If BooleanPuntAsig (Result, Caja) Then
CargaTextListCade (Caja.Lines, Texto);
End;
Function TextoGuarTRichEdit (Const Caja :TRichEdit) :String;
Begin
If ConseCadePuntVali (Result, Caja) Then
Result := TextoGuarListCade Caja.Lines);
End;
La clave está en el uso de los métodos LoadFromStream y SaveToStream de la propiedad Lines de un componente TRichEdit.
Tales métodos son utilizados internamente por TDBRichEdit para leer y guardar el valor de un campo alfanumérico, que es presentado en pantalla como texto enriquecido.