Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como eliminar el Retorno de Carro al final de un TString (https://www.clubdelphi.com/foros/showthread.php?t=31671)

gluglu 14-05-2006 18:59:02

Como eliminar el Retorno de Carro al final de un TString
 
Hola compañeros del foro !

Estoy trabajando con un TRichEdit manejando los TString's correspondientes con la propiedad TRichEdit.Lines, añadiendo y quitando.

Si tengo una línea terminada con su correspondiente 'Retorno de Carro' y 'Avance de Línea' (#13#10), por ejemplo en la línea 10, y elimino todas las líneas posteriores con RichEdit.Lines.Delete[...], lo que pretendo es que NO me deje la línea 10 con dicho retorno de carro, con lo que el usuario se podría posicionar con el cursor al principio de la línea 11.

Lo que precisamente me gustaría es dejar el texto de la línea 10 completo pero sin el #13#10 final.

Esto lo preciso porque la línea 10 tiene un formato determinado en el RichEdit, y la línea 11 tiene otro formato diferente. Resulta que si elimino las líneas que quiero (en este ejemplo, de la 11 en adelante ...), y dejo el cursor al final del texto del RichEdit, el cursor aparece al principio de la línea 11 con el formato que tenía la línea 11. Si el usuario sigue introduciendo texto ahí, lo hará con el formato que tenía la línea 11. Y lo que yo quiero hacer es que quede al final de la línea 10 con el formato de la línea 10.

Espero haberme explicado bien.

Saludos a todos

maravert 14-05-2006 19:31:54

pues
 
Creo que sería pratico si nos mandas el codigo para poder ayudarte.

Saludos

Lepe 14-05-2006 19:49:57

La solución me parece que es seleccionar por código el posible texto que haya despues de la linea 10 y asignar las propiedades de SelAttributes a las que tenga la línea 10.

Si eliminas el retorno de carro, en realidad no estas borrando ese "último caracter con formato distinto" así que estas en las mismas.

Saludos

gluglu 14-05-2006 19:55:55

El código no te dirá mucho
Código Delphi [-]
for I := Editor.Lines.Count - 1 downto Aux_Pos do
  Editor.Lines.Delete(I);
Es un tema de comprobación en tiempo de ejecución. Puedes comprobar lo que expliqué arriba. Si borras líneas del Editor.Lines, la última que se queda tiene el #13#10 al final y el usuario puede posicionarse en el principio de la 'siguiente línea' que en este caso tenía un formato diferente.

gluglu 14-05-2006 20:09:30

Gracias Lepe,

Respondías mientras yo también escribía mi anterior respuesta.

El tema es que se supone que he borrado por código la línea 11 mediante Editor.Lines.Delete[11], y que ahí no hay nada que seleccionar y cambiar mediante SelAttributes (al menos eso creo, aunque la verdad es que no lo he probado todavía). En cualquier caso, lo que pretendía era precisamente evitar eso, tener que seleccionar y modificar los atributos.

La pregunta formulada de otra manera sería: se pueden manipular los caracteres de control de un TString ? Porque en cualquiera de las propiedades de un TString, o sus funciones, siempre obtengo sólo el texto y no los caracteres de control asociados.

Lepe 15-05-2006 17:24:03

Lo que se me ocurre es que dejes una linea al final con el mismo formato que la linea 10. Al borrar las lineas de en medio, siempre quedará ésta última linea.

He estado mirando a ver si DefAttributes te podía servir, pero una vez que se ha aplicado un formato se queda ahí.

Como bien dices, el formateo del texto se hace internamente a través de la propiedad PlainText y no puede accederse a menos que vuelques el contenido en un TMemoryStream (por ejemplo) con PlainText := false y despues lo modifiques.... pero creo que es demasiado trabajo, amén de meterte con la especificación RTF que no es nada trivial ;).

Saludos y siento no tener una mejor respuesta :(


La franja horaria es GMT +2. Ahora son las 20:34:04.

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