Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   insertar texto en richedit con formato (https://www.clubdelphi.com/foros/showthread.php?t=76243)

Lizeth 18-10-2011 20:25:03

insertar texto en richedit con formato
 
Hola pues me declaro incompetente para esto, es algo tan sencillo pero no entiendo.

Tengo un richedit y una lista, cuando el usuario hace doble click en la lista se copia el texto del renglón de la lista al richedit, eso lo manejo así y funciona bien.

Código Delphi [-]
procedure MiForma.miRichEditExit(Sender: TObject);
begin
inherited;
    iPosMemo := miRichEdit.SelStart;
end;
procedure MiForma.ListaDblClick(Sender: TObject);
var sAntes, sDespues : string;
     iTope:integer;
     sValor : string;
begin
inherited;
  
    iTope := length(miRichEdit.Text) - iPosMemo;
   sAntes := copy(miRichEdit.Text,1,iPosMemo);
   sDespues := copy(miRichEdit.Text,iPosMemo+1,iTope);
   sValor := Lista.Selected.SubItems.Strings[0];
   miRichEdit.Text:= sAntes +' '+ sValor + ' ' +sDespues;
end;




El problema es que mi richedit tiene formato(negritas, cursiva etc) y al introducir el nuevo texto zas le quita el formato, lo entiendo porque pasa como texto plano, intente trabajar con TMemoryStream ja pero no entiendo. Si paso el texto de mirichedit a otro RichEdit1y se que se hace con:

Código Delphi [-]
var  Corriente: TMemoryStream; 
 try
   miRichEdit.Lines.SaveToStream(Corriente);
   Corriente.Seek(0,soFromBeginning);
   RichEdit1.Lines.LoadFromStream(Corriente);
 finally
   if Assigned(Corriente) then Corriente.Free;
 end;

Pero necesito copiar partes del richedit el antes y el despúes para poder introducir el texto de la lista pero al hacer un copyfrom aa me manda un erro de Stream read error :(
Empece copiando el antes, pero no funciona nadita.

Código Delphi [-]
var
   rich1, rich2:TMemoryStream;
begin
   rich1 := TMemoryStream.Create;
   rich2 := TMemoryStream.Create;
   rchePlant.Lines.SaveToStream(rich1);
   rich2.CopyFrom(rich1,rich1.Size - iPosMemo); //iPosMemo lo lleno al salir del richedit
   RichEdit1.Lines.LoadFromStream(rich2);
end;

Se que tengo que usar el seek pero ni siquiera entiendo como funciona ni sus parámetros, ya busque en la ayuda y me deja igual.

Alguien me podría ayudar, se que es algo simple pero no entiendo, o tal vez mi idea de como hacerlo es erronea.

Gracias

Chris 18-10-2011 21:45:20

Hola Lizeth!

Estás mesclando muchas ideas en tu mensaje, por lo que lo que realemente deseas queda confuso. Pero según entendí leyendo bien tu mensaje es agregar al cursor el texto que está en un ListBox manteniendo el formato del párrafo dónde valla a quedar insertado el nuevo texto.

Veo que tu código estás complicándote las cosa un poco. Hasta dónde recuerdo en mis trabajos con este componente, lo que deseas hacer es algo relativamente sencillo. Creo que bastaría con un código así:

Código Delphi [-]
procedure MiForma.ListaDblClick(Sender: TObject);
var 
    sValor: string;
begin
inherited;
    sValor := Lista.Selected.SubItems.Strings[0];
    with MiRichEdit do
    begin
        SelLength := 0; // si quieres reemplazar todo el texto
                        // seleccionado, quita esta línea del código.
        SelText :=  sValor;
    end;
end;

Como verás, las demás variables no son necesarias y mucho menos recordar la posición del cursor cuando el control pierde el foco. La propiedad SelText se encarga de todo lo que estabas intentando hacer y respetará el formato del párrafo. Vale mencionar que estabas perdiendo el formato porque lo que realmente hacías es eliminar todo el texto del RichEdit y reemplazándolo por un texto plano.

Saludos,
Chris.

Lizeth 19-10-2011 01:13:39

Chris como diría mi jefe, casi se me caen los chones :o jijiji.

Funciona perfecto, no lo puedo creer, algo tan simple. Yo lo estaba complicando.

Muchisimas gracias en donde quiera que estes y te mando un beso en agradecimiento.

Graaaaaaaaaaaaaaaaaaaaaaaaaacias.

oscarac 19-10-2011 06:20:41

y que cosa son chones???:cool:

cubanbaker 19-10-2011 11:48:54

Oscar, tendremos que ir a Mexico para averiguarlo... :D

ecfisa 19-10-2011 18:33:39

Cita:

y que cosa son chones???
Cita:

Oscar, tendremos que ir a Mexico para averiguarlo...
Según google chones es esto.

De ser así, yo creo que Chris no es conciente del potencial efecto de sus respuestas, vamos a tener que pedirle que se modere con ellas... :)

Un saludo.

Chris 19-10-2011 18:42:25

Cita:

Empezado por ecfisa (Mensaje 416187)
De ser así, yo creo que Chris no es conciente del potencial efecto de sus respuestas, vamos a tener que pedirle que se modere con ellas... :)

No entendí :p

Y todavía no sé que son "chontes"

ecfisa 19-10-2011 18:52:28

Cita:

Empezado por Chris (Mensaje 416190)
No entendí :p

Y todavía no sé que son "chontes"

Es que no son "chontes", son "chones" !!! :D

Saludos. :)

Chris 19-10-2011 18:55:20

Cita:

Empezado por ecfisa (Mensaje 416195)
Es que no son "chontes", son "chones" !!! :D

JAJAJAJAJA :D oook!


La franja horaria es GMT +2. Ahora son las 01:31:48.

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