Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TEdit y TLabel, cada letra de un color (https://www.clubdelphi.com/foros/showthread.php?t=89281)

josepicd 28-10-2015 17:02:45

TEdit y TLabel, cada letra de un color
 
Buenas de nuevo, os cuento.

Necesito tener un par de controles, un TEdit y un TLabel con un metodo donde yo pueda decirle que la letra numero X sera de color rojo, el resto negro. Un supuesto sera para resaltar la letra tonica dentro de una palabra. Por ejemplo:

Código Delphi [-]
lbl : Tmylabel;

lbl.Caption := 'prepago';  // se veria todo negro.
lbl.settonica( 5); // se veria todo negro excepto la 'a' que deberia estar en rojo
lbl.settonica(3); //  se veria todo negro excepto la 'e' que deberia estar en rojo

en el caso de el Tedit

Código Delphi [-]
edt : TmyEdit;
edt.settonica(0); // anulamos, todo se escribiria en negro.

en el edt.onexit() haria eso edt.settonica(3) ;

Alguien tiene alguna idea brillante?

AgustinOrtu 28-10-2015 18:09:44

Hasta donde yo se lo unico que podrias usar es un RichEdit (de lo que viene de fabrica con delphi).
Otra alternativa (de la cual no tengo mucha experiencia) seria dibujar el texto con canvas.

Aca hay un ejemplo: en StackOverflow

Sino componentes de terceros

Neftali [Germán.Estévez] 29-10-2015 13:18:17

Tal y como comenta Agustín, si deseas usar un Label con un método nuevo, deberás crear un nuevo componente y añadir las características que necesites.
Segúramenet sobrescribiendo el método paint:

Código Delphi [-]
  procedure Paint; override;

La otra opción, para no "reinventar la rueda" es usar un TRickEdit, que ya posee todo lo necesarios para colorear el texto que hay en su interior.

Código Delphi [-]
  reTexto.lines.Clear;
  reTexto.SelAttributes.Color := clBlack;
  reTexto.lines.Add('camión');
  reTexto.SelStart := 4;
  reTexto.SelLength := 1;
  reTexto.SelAttributes.Color := clRed;


roman 29-10-2015 15:44:09

Cita:

Empezado por Neftali (Mensaje 498577)
usar un TRickEdit

¡Qué curioso nombre! ¿No será un TRichEdit? :p

// Saludos

josepicd 29-10-2015 16:07:25

Bueno, gracias de nuevo a todos. El metodo paint del TEdit no se puede sobreescribir ya que no lo implementa el componente para ello, deberia heredar mi nuevo componente desde mas arriba TCustomEdit o aun mas, no lo he mirado.

Bueno el caso es que no queria complicarme mucho y tampoco soy partidario de ir implementando componentes a diestro y siniestro asi que al final he hecho lo siguiente por si alguien lo necesita. Simplemente cuando me place llamo a este procedimiento que lo unico que hace es repintar encima poniendome en rojo la letra numero "idx".

Código Delphi [-]
procedure TMyEdit.settonica( idx : integer);
var
 fCanvas: Tcanvas;
 i, p, t: integer;
 st, st2: string;
 left : integer;
 c, c2: char;
begin
 try
   fcanvas := tcontrolcanvas.Create;
   TcontrolCanvas(fcanvas).Control := Self;
   fcanvas.Brush.Color := Brush.Color;
   fcanvas.font := font;
   st := Text;
   st2 := uppercase(Text);
   p := ((self.Width - fcanvas.TextWidth(st)) div 2)-2;
   t := ((self.Height - fcanvas.TextHeight(st)) div 2)-3;
   for i := 1 to length(st) do begin
     c := st[i];
     c2 := st2[i];  
       if i = idx  then fcanvas.Font.Color := clred
                     else fcanvas.Font.Color := clblack;
     fcanvas.TextOut(p, t, c);
     P := P + fcanvas.TextWidth(c);
   end;
 finally
   fcanvas.Free;
 end;
end;

Neftali [Germán.Estévez] 29-10-2015 17:16:24

Cita:

Empezado por roman (Mensaje 498581)
¡Qué curioso nombre! ¿No será un TRichEdit? :p

// Saludos

Será, será,... :D


La franja horaria es GMT +2. Ahora son las 09:03:37.

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