Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Añadir el contenido de un TRichEdit a otro. (https://www.clubdelphi.com/foros/showthread.php?t=82322)

TiammatMX 22-02-2013 20:23:47

Añadir el contenido de un TRichEdit a otro.
 
Buena tarde, jóvenes Delphineros.

Resulta que tengo VARIOS TRichEdit (bueno, en realidad, son componentes comprados que se comportan como un TRichEdit) y deseo AÑADIR el contenido de ellos y resumirlos en un componente que se encargará de imprimir y demás.

Tengo éste código, que COPIA y SUSTITUYE el contenido del RichEdit destino, pero ELIMINA el contenido anterior, el cual NECESITO conservar.

Código Delphi [-]
procedure Tform.CopiaRTF(RTFFuente,RTFDestino: TwwDBRichEdit);
var
   msVector: TMemoryStream;
begin
   msVector := TMemoryStream.Create;
   try
      RTFFuente.Lines.SaveToStream(msVector);
      msVector.Seek(0,soFromBeginning);
      RTFDestino.Lines.LoadFromStream(msVector);
   finally
      if Assigned(msVector) then
         msVector.Free;
   end;
end;

¿Alguna idea que me ayude? Tengo casi todo listo, pero el tema de "añadir" me tiene vuelto loco...

Casimiro Notevi 22-02-2013 20:45:06

¿Y no te vale algo simple como esto?:

Código Delphi [-]
reFinal.text := reFinal.Text + reUno.Text + reDos.Text + reTres.Text;

TiammatMX 22-02-2013 20:49:28

Cita:

Empezado por Casimiro Notevi (Mensaje 455437)
¿Y no te vale algo simple como esto?:

Código Delphi [-]
reFinal.text := reFinal.Text + reUno.Text + reDos.Text + reTres.Text;

No, Casi (¡¡BUEN AMIGO, NO ME TOCÓ "RECORDATORIO"!!), por que los demás TRichEdit o similares contienen formato y la idea es CONSERVAR el formato (negrillas, itálicas, subrayado), que si copio el texto "crudo" se perderían...

Casimiro Notevi 22-02-2013 20:52:31

Precisamente, si copias el "texto crudo" se copia todo, ¿no?.
Que conste que no lo he probado, pero es por lógica.

TOPX 22-02-2013 20:54:42

Cita:

Empezado por tiammat (Mensaje 455440)
la idea es CONSERVAR el formato (negrillas, itálicas, subrayado)

Buenas tardes,

De pronto algo del código de las siguientes publicaciones le dé una idea:-

TiammatMX 22-02-2013 21:35:43

Cita:

Empezado por Casimiro Notevi (Mensaje 455442)
Precisamente, si copias el "texto crudo" se copia todo, ¿no?.
Que conste que no lo he probado, pero es por lógica.

No, Casimiro..., sólo se copia el texto, no los caracteres de control...

TiammatMX 22-02-2013 21:47:13

Cita:

Empezado por TOPX (Mensaje 455443)
Buenas tardes,

De pronto algo del código de las siguientes publicaciones le dé una idea:-

Concatenar los streams no me sirve (al menos, para éste caso) por que se añaden datos en diferentes momentos de la aplicación...

... y el otro ejemplo, es como un avión caza ruso (¡así de complicado! :p :D ) pero con un poco de tiempo creo poder hacer algo que sea útil..., gracias.

Casimiro Notevi 22-02-2013 22:50:49

Cita:

Empezado por tiammat (Mensaje 455446)
No, Casimiro..., sólo se copia el texto, no los caracteres de control...

¿Y esos caracteres de control no están en el .Text?, ¿dónde están?
Es por curiosidad.

TiammatMX 23-02-2013 01:15:17

Cita:

Empezado por Casimiro Notevi (Mensaje 455452)
¿Y esos caracteres de control no están en el .Text?, ¿dónde están?
Es por curiosidad.

Son parte del texto, pero son los que "embellecen" el RichEdit. Por ejemplo, yo tengo éste procedimiento...

Código Delphi [-]
procedure Tform.FormateaTextoRTF(sTexto1,sTexto2: string;iTipo: Integer;Destino:TwwDBRichEdit);
begin
   with Destino do
   begin
      SelStart := GetTextLen;
      case iTipo of
         0 : begin
                SelAttributes.Size := 12;
                SelAttributes.Style := [fsBold];
                SelAttributes.Color := clNavy;
             end;
         1 : begin
                SelAttributes.Size := 10;
                SelAttributes.Style := [fsBold];
                SelAttributes.Color := clNavy;
             end;
         2 : begin
                SelAttributes.Size := 9;
                SelAttributes.Style := [fsBold];
                SelAttributes.Color := clWindowText;
             end;
         3 : begin
                SelAttributes.Size := 8;
                SelAttributes.Style := [fsBold];
                SelAttributes.Color := clWindowText;
             end;
      end;
      SelText := sTexto1;
      SelAttributes.Size := 8;
      SelAttributes.Style := [];
      SelAttributes.Color := clWindowText;
      if Trim(sTexto2) > '' then
         SelText := sTexto2;
      SelText := CRLF;
   end;
end;

Si te das cuenta, primero le da formato al texto Y DESPUÉS lo escribe. Éstos caracteres de control son los que no alcanza a copiar el .Text de un RichEdit a otro...

Casimiro Notevi 23-02-2013 01:34:48

No me había dado cuenta que no estás usando "plaintext" sino "rtf".

Echa un vistazo a este hilo y a este otro.

ecfisa 23-02-2013 09:41:14

Hola tiammat.

Revisa también este código de Zarko Gajic Append or Insert RTF from one RichEdit to Another, y aunque esta mas complicado que ponerle pantalón a un pulpo, con TRichEdit funciona.

Saludos.:)


La franja horaria es GMT +2. Ahora son las 00:56:50.

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