Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Poner en negrita dentro de un memo o richtext algunas palabras específicas (https://www.clubdelphi.com/foros/showthread.php?t=55731)

enecumene 24-04-2008 22:26:50

Poner en negrita dentro de un memo o richtext algunas palabras específicas
 
Hola compañeros del foro, quería saber si existe alguna función que me permita hacer lo siguiente:

Quiero cargar en un memo o RichText un archivo de texto por ejemplo, y que algunas de las palabras que están cargadas en el memo o RichText y que tengo en otro archivo de texto se pongan en negrita, para explicarlo un poco mejor:

Carta.txt //archivo de texto que contiene una carta.
Palabras.ini //archivo que contiene una lista de palabra.

Cargo en el memo o RichText el archivo Carta.txt, luego de cargado en el memo me ponga en negrita las palabras que existen en Palabras.ini, si en palabras.ini tiene "Estimado", si existe en el memo se ponga en negrita, no sé si me expliqué bien, estoy un poco espeso hoy.

Saludos.

PD. Sé cómo leer archivos INI. :D

ixMike 24-04-2008 22:33:28

Bueno, con RichEdit puedes, claro, con TMemo no (al menos de forma sencilla). :)

En RichEdit, tan sólo tienes que seleccionar el texto por código (con SelStart y SelLength) y cambiar la propiedad SelAttributes (de tipo TFont).

Y creo que ya está :D



Salu2 :)

enecumene 24-04-2008 22:36:00

Vale Miguel y ¿cómo relaciono las palabras del RichText con los que están en el archivo .INI de palabras?.

Saludos.

ixMike 24-04-2008 22:39:09

¿Buscarlas, dices?

Pues con la función Pos o AnsiPos... pero esa sólo devuelve la posición de la primera... supongo que necesitarás de un bucle, para recorrer todas las palabras del RichEdit y compararlas con las que hay en Palabras.INI. ;)


Salu2 :)

enecumene 24-04-2008 22:43:19

Vale pues, déjame entonces hacer par de pruebas con las funciones que me propones, más tarde te comento como me va, Gracias.

Saludos.

reinier 25-04-2008 17:05:36

Cita:

Empezado por ixMike (Mensaje 282429)
¿Buscarlas, dices?

Pues con la función Pos o AnsiPos... pero esa sólo devuelve la posición de la primera... supongo que necesitarás de un bucle, para recorrer todas las palabras del RichEdit y compararlas con las que hay en Palabras.INI. ;)


Salu2 :)


ixMike soy reinier estaba leyendo uno de estos temas y me interese por el que se trata aqui.Tengo una duda paracida a la de enecumene concuerdo contigo en el procedimiento para el cual selecciona la palabra y la pone en negrita ,pero para lo que yo quiero hacer que viene siendo algo parecido a un compilador si a la palabra reservada se le agraga o elimina un caracter esta debe quitarsele el atributo que se le puso(estilo de fuente negrita) y no se de que manera hacer esto si puedes escribeme aqui mismo tu solucion. Gracias:cool:

santus 25-04-2008 19:26:38

enecumene: Yo lo hice una vez para procesar archivos RTF: Te lo dejo asi te das una idea. Despues lo adaptas a tu proyecto :

Código Delphi [-]
procedure Tform1.ReccorrerTexto;
var
  i : Integer;
begin
  for i := 0 to reDocumento.Lines.Count -1 do begin
    with reDocumento do begin
          SelStart := Perform(EM_LINEINDEX, i, 0) ;    // Se situa en la linea de reDocumento.
          //Perform(EM_SCROLLCARET, 0, 0);             // Mueve el scroll.
          SetFocus;
          SelLength := Length(Lines.Strings[i]);
          atributosGenerales  := DefAttributes;
          procesarLinea(i,Lines.Strings[i]);  //reDocumento.Lines.String[i] es toda la linea seleccionada.
    end;
  end;

end;


procedure procesarLinea(Position:Integer; Text: String);
var
  textoParcial : string;
  posInicial : integer;
begin
  if (Trim(Text) <> '') then begin
    posInicial := 0;
    for i := 1 to Length(Text) + 1 do begin
      if (Text[i] = ' ') or (i = Length(Text) + 1 ) then begin
        reDocumento.SelStart  := reDocumento.Perform(EM_LINEINDEX, Position, 0)+posInicial ; //se posiciona sobre la palabra en la línea.
        reDocumento.SelLength := Length(textoParcial);
        // Aquí tienes que buscar la palabra en la lista:
        // supongamos BuscarEnLista(textoParcial) ... textoParcial Contiene el texto seleccionado.
        posInicial := i;
        textoParcial := '';
      end else if not ( Text[i] = #0) then textoParcial := textoParcial + Text[i];
    end;
  end;
end;

Fijate que por ahí me comí algo en el código porque le saqué un monton de cosas mas que había en el medio que no viene a este caso. Intenta probarlo y después nos cuentas como te fue ;) ...


reinier: No creo que esto te sirva... me imagino que tendrías que elaborar algo con el keypress.... igual no se me ocurre qué. Esto no te servira porque te mueve el cursor en donde estas escribiendo. Si te sirve si lo quieres procesar todo de una.

Saludos a todos.


La franja horaria es GMT +2. Ahora son las 11:17:30.

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