Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   RE HighLighter 1.0 - Al fin lo consegui (https://www.clubdelphi.com/foros/showthread.php?t=37064)

Delar 01-11-2006 15:31:31

RE HighLighter 1.0 - Al fin lo consegui
 
Bien... esto consta de dos procedures... una para poner en negrita, y otra para poner en color... pronto añadire negrita-color, cursiva... etc :D
Aqui va la primera (Negrita)
Código Delphi [-]
//WordSetBold Procedure By Delar
  procedure WordSetBold(RichE:TRichEdit;word:string);
     var
       Text:string;
       Pos:integer;
     begin
       text := RichE.Lines.Text;
       repeat
         Pos:=ansipos(word,text);
         Riche.SelStart:=Pos-1;
         Riche.SelLength:=Length(word);
         Riche.SelAttributes.Style := [fsBold];
         if text > Chr(1) then
         begin
         text[Pos+1]:=Chr(255);
         end;
         Pos:=ansipos(word,text);
         Riche.SelStart:=Pos-1;
         Riche.SelLength:=Pos;
         Riche.SelAttributes.Style := [];
       until (Pos=0);
     end;
Y el segundo (color)
Código Delphi [-]
//WordSetColor Procedure By Delar
       procedure WordSetColor(RichE:TRichEdit;word:string;col:TColor);
     var
       Text:string;
       Pos:integer;
     begin
       text := RichE.Lines.Text;
       repeat
         Pos:=ansipos(word,text);
         Riche.SelStart:=Pos-1;
         Riche.SelLength:=Length(word);
         Riche.SelAttributes.Style := [];
         Riche.SelAttributes.Color := col;
         if text > Chr(1) then
         begin
         text[Pos+1]:=Chr(255);
         end;
         Pos:=ansipos(word,text);
         Riche.SelStart:=Pos-1;
         Riche.SelLength:=Pos;
         Riche.SelAttributes.Style := [];
         Riche.SelAttributes.Color := clBlack;
       until (Pos=0);
     end;

Como se usa:

Código Delphi [-]
//Suponiendo que el RichEdit que queremos colorear es RichEdit1
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
WordSetBold(RichEdit1,'if');
WordSetBold(RichEdit1,'then');
WordSetColor(RichEdit1,'button_pressed',clPurple);
WordSetColor(RichEdit1,'true',clMaroon)
end;

Cada vez que se pulse una tecla, lo hace :P
No está pensado para mucho color, porque realentizaria, pero aun asi sirve.

PD: Aquí os dejo una imagen

Saludos, Delar!

Bicho 01-11-2006 21:03:13

Hombre pues está muy bien, aunque es curioso, yo uso esa misma función desde hace años en mi trabajo, lo que el color y la negrita lo hace un sólo procedimiento y dependiendo de los parámetros se pone uno, otro o ambos.
La diferencia radica en que la nuestra es una funció y no un procedimiento, y es que además de remarcar el texto, lo que hace es devolverte la posición en el richedit del texto que hemos escrito.
Es decir lo usamos para búsquedas, en programas automáticos, nos sirve muchísimos, para la info que ese está tratando, no sólo el resaltar, sino el hecho de que te diga donde está, porque con eso, el programa toma unas acciones u otras. Pero bueno, no os voy a marear con asuntos de mi trabajo :p

De todos modos, está muy bien, y te animo a que añadas éste texto en la sección de trucos, para que todo aquel que esté buscando ésto o una orientación tenga una rápida respuestas buscando en los trucos.

Saludos y gracias por tu aportación.

Delar 01-11-2006 21:45:23

OK, listo, añadido a la seccion de trucos :D


La franja horaria es GMT +2. Ahora son las 23:52:20.

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