Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2015
josepicd josepicd is offline
Miembro
 
Registrado: jun 2015
Posts: 57
Poder: 9
josepicd Va por buen camino
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?

Última edición por dec fecha: 28-10-2015 a las 18:42:35. Razón: Poner etiquetas DELPHI
Responder Con Cita
  #2  
Antiguo 28-10-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 29-10-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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;

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 29-10-2015
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
usar un TRickEdit
¡Qué curioso nombre! ¿No será un TRichEdit?

// Saludos
Responder Con Cita
  #5  
Antiguo 29-10-2015
josepicd josepicd is offline
Miembro
 
Registrado: jun 2015
Posts: 57
Poder: 9
josepicd Va por buen camino
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;
Responder Con Cita
  #6  
Antiguo 29-10-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
¡Qué curioso nombre! ¿No será un TRichEdit?

// Saludos
Será, será,...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
drag and drop TLabel a TEdit Colifo_ Varios 2 12-10-2010 06:28:53
formato de un Tedit o Tlabel mjjj Varios 2 11-07-2008 19:55:06
Cambiar Color de Tlabel con el Mouse c748a OOP 3 10-06-2005 02:53:13
color de letra en dbgrid squenda OOP 2 15-12-2004 10:27:33
color y letra en un archivo .ini VolaRe Varios 4 05-02-2004 22:36:29


La franja horaria es GMT +2. Ahora son las 12:34:07.


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
Copyright 1996-2007 Club Delphi