Ir al contenido


Foto

Eliminar espacio en blanco, al final del texto. RichEdit


  • Por favor identifícate para responder
6 respuestas en este tema

#1 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 01 junio 2015 - 09:23

Buenas, tengo un texto en un RichEdit, lo que quiero es eliminar los espacios en blanco al final del mismo pero, SIN PERDER EL FORMATO.
No le estoy encontrando la vuelta. Usando Trim no funciona bien la cosa pues pierde el formato de texto.
 
Gracias.

  • 0

#2 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 mensajes
  • LocationMisiones, Argentina

Escrito 01 junio 2015 - 01:43

Si no importa que no sea desde un programa, podrías leerlo desde un editor de texto plano, ya que los caracteres de formato aparecerán como símbolos ASCII diferentes de números y letras, el único problema será cuando no pueda ser "mapeado" y lo muestre como blanco.

Recuerdo que una vez hice un pequeño programa que leía con BlockRead y quitaba solo los caracteres con valor 32. Obviamente lo interpretaba como un arreglo de tipo numérico.

 

Espero te sirve y espero haber entendido bien tu problema

Saludos


  • 1

#3 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 17 junio 2015 - 01:47

Muchas gracias.

El gran ecfisa (Club Delphi) nos regala la solución al problema.

Con su permiso:


delphi
  1. procedure TrimRE(RichEdit: TRichEdit);
  2. var
  3. i: Integer;
  4. begin
  5. with RichEdit do
  6. begin
  7. if Lines.Count > 0 then
  8. begin
  9. i := Lines.Count-1;
  10. while Lines[i] = EmptyStr do
  11. begin
  12. Lines.Delete(i);
  13. Dec(i);
  14. end;
  15. SelStart := Length(Text) - Length(Trim(Lines[Lines.Count-1]));
  16. SelLength := Length(Text);
  17. SelText := '';
  18. end;
  19. end;
  20. end;

Puede encontrarse aquí

 

Gracias.


  • 2

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 17 junio 2015 - 03:56

Lo que no entiendo es porqué no basta con emplear trim. Tampoco logro entender porqué debe invocarse el seleccionado al establecer los valores a SelStart, SelLength y SelText. Me dejó pensando...

 

Saludos,


  • 0

#5 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 17 junio 2015 - 04:12

Porque si lo hacemos solo con Trim se pierde el formato.
Al principio lo hice así y me quedaba todo en texto plano.
Es medio engorroso pero bueno...
Saludos.
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 17 junio 2015 - 04:50

No se si engorroso pero si curioso. Lo loco es que si el uso de trim es el problema, ¡en la solución lo usa de todas formas! Fijate que para calcular la posición inicial de seleccionado invoca dentro del Length() a Trim(). Vaya a saber que magia oscura hay detrás del Seleccionado vacio que aplicó como para que respetase y no se perdiera el formato.

 

Cosas de mandiga.

 

Saludos,


  • 0

#7 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 17 junio 2015 - 07:07

Según lo que he leído en algún lado, puede que venga de más arriba el problema, aparentemente el control RichEdit de windows es una implementación bastante fea, peor si desde delphi tenenos que conformarnos con un wrapper
El resultado es que hay que recurrir a este tipo de código "oscuro", " injerto", hack, llamarlo como sea

Lo deseable es que la clase provea un método clear, que haga el trabajo como debe ser, porque estamos hablando de un control de edición de texto y limpiar el contenido es medio algo básico
  • 0




IP.Board spam blocked by CleanTalk.