Ir al contenido


Foto

[RESUELTO] Insertar etiquetas dentro de un RichEdit desde el cursor


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

#1 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 26 octubre 2010 - 09:18

Hola a todos !!!!

Aquí ando con una dudita pequeñita.... Tengo una aplicación que me permite agregar en un Texto contenido en un RichEdit algunas etiquetas que me sirven como campos para obtener los datos de una BD y que serán insertados en el Texto al momento de ejecutarse....

Por el momento tengo esto:



delphi
  1. procedure TForm3.ListBox1DblClick(Sender: TObject);
  2. var
  3.   a, sEtiqueta: String;
  4. begin
  5.   sEtiqueta:= ProcesaEtiqueta(ListBox1.Items[ListBox1.ItemIndex]);
  6.   a:=cxRichEdit1.Text;
  7.   Insert(sEtiqueta,a,cxRichEdit1.SelStart);
  8.   cxRichEdit1.Text:=a;
  9. end;



Si el Texto contenido en el RichEdit tiene saltos de linea o espacios la inserción no se hace a partir del cursor. SelStart se supone que me da la posición del mismo, pero al parecer no considera ni los espacios ni los saltos de línea, generando algo así:


AAAA  AAAAAAA 

AAAAAA<etiqueta>AAAA


en vez de:


AAAA  AAAAAAA 

AAAAAAAAAA  <etiqueta>


Espero que se haya entendido mi problemita y les agradeceré bastante su ayuda  :embarrassed:

Saludox ! :)
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 26 octubre 2010 - 09:28

Saludos.

Si no entendí mal, lo que andas buscando es que las etiquetas se puedan reemplazar por un valor de la BD.

Siendo así te recomiendo utilizar la sentencia StringReplace que te sirve para reemplazar valores, sin importar su posición dentro del texto su tampoco cuantas veces se repite.

Returns a string with occurrences of one substring replaced by another substring.

Unit

SysUtils

Category

string handling routines

Delphi syntax:

function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

C++ syntax:

extern PACKAGE AnsiString __fastcall StringReplace(const AnsiString S, const AnsiString
OldPattern, const AnsiString NewPattern, TReplaceFlags Flags);

Description

StringReplace replaces occurrences of the substring specified by OldPattern with the substring specified by NewPattern. StringReplace assumes that the source string may contain Multibyte characters.

S is the source string, whose substrings are changed.

OldPattern is the substring to locate and replace with NewPattern.

NewPattern is the substring to substitute for occurrences of OldPattern.

Flags is a set of flags that govern how StringReplace locates and replaces occurrences of OldPattern. If Flags does not include rfReplaceAll, StringReplace only replaces the first occurrence of OldPattern in S. Otherwise, StringReplace replaces all instances of OldPattern with NewPattern. If the Flags parameter includes rfIgnoreCase, The comparison operation is case insensitive.


  • 0

#3 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 26 octubre 2010 - 09:46

Es correcto amigo Rolphy pero no es precisamente mi problema...

Trataré de explicarlo un poco mejor.... Estoy realizando un documentador donde un usuario pueda decidir dónde poner ciertas etiquetas predeterminadas y el texto que desee a un documento X y después guardarlo en una BD para que al momento de que lo mande llamar se muestre el documento personalizado ya con los valores  de la BD reemplazando las etiquetas que el mismo usuario introdujo...

El detalle es que necesito que las etiquetas que el usuario introduzca sean exactamente donde él las quiere... y generalmente para insertar texto dentro de otro texto hacemos uso del cursor, lo ubicamos y es a partir de ahí donde se coloca el nuevo texto....

Me he explicado un poco mejor ?  :embarrassed:

Saludox ! :)


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 26 octubre 2010 - 12:33

Hola amiguita



delphi
  1. procedure TForm1.RichEdit1Click(Sender: TObject);
  2. var
  3.   a: string;
  4. begin
  5.   ShowMessage(format('%d,%d',[richEdit1.CaretPos.Y,richEdit1.SelStart]));
  6.   a:= RichEdit1.Text;
  7.   insert('<etiqueta>',a,richEdit1.SelStart+richEdit1.CaretPos.Y);
  8.   RichEdit1.Text := a;
  9. end;



Salud OS ;)
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 26 octubre 2010 - 12:41

Ya decía yo amiguito que tenía que ver con los saltos de línea  :p  :p  :D  :D  8o|

Exactamente eso me faltaba, aumentarle al SelStart la cantidad de saltos de líneas introducido con CaretPos.Y  (y)

Gracias !

Saludox ! :)
  • 0




IP.Board spam blocked by CleanTalk.