Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Copiar el texto de un TRichEdit a otro (https://www.clubdelphi.com/foros/showthread.php?t=80661)

dec 02-07-2006 00:34:27

Copiar el texto de un TRichEdit a otro
 
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 [-]
{ Cargar Texto en Lista de Cadenas }
Function CargaTextListCade (Const Lista :TStrings; Const Texto :String) :Boolean;
Var
  FlujAuxi :TStringStream;  { Flujo Auxiliar }
Begin
  If LimpiBooleanPuntNulo (Result, Lista) Then
    Exit;

  FlujAuxi := TStringStream.Create (Texto);

  Try
    Lista.LoadFromStream (FlujAuxi);
  Finally
    FlujAuxi.Free;
  End;
End;

{ Texto que Guarda Lista de Cadenas }
Function TextoGuarListCade (Const Lista :TStrings) :String;
Var
  FlujAuxi :TStringStream;  { Flujo Auxiliar }
Begin
  If LimpiCadePuntNulo (Result, Lista) Then
    Exit;

  FlujAuxi := TStringStream.Create ('');

  Try
    Lista.SaveToStream (FlujAuxi);
    Result := FlujAuxi.DataString;
  Finally
    FlujAuxi.Free;
  End;
End;

{ Cargar Texto en TRichEdit }
Function CargaTextTRichEdit (Const Caja :TRichEdit; Const Texto :String) :Boolean;
Begin
  If BooleanPuntAsig (Result, Caja) Then
    CargaTextListCade (Caja.Lines, Texto);
End;

{ Texto que Guarda TRichEdit }
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.


La franja horaria es GMT +2. Ahora son las 01:19:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi