Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-06-2012
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.278
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
Pintar linea de TTreeView de 2 colores

Buenas a todos.
Tengo un problemilla y estoy atascado. No se si es que me he obcecado, pero el caso es que algo que parece simple no me acaba de funcionar... :-(

La idea es poder pintar una línea de un TreeView (el texto de un nodo) en 2 colores diferentes.
Una imagen que refleja más o menos lo que necesito es esta:



Se que con componentes más avanzados que el estándard (tipo VirtualTreeView de Softgems) se podrá hacer, pero me resisto a utilizarlo para algo que parece tan simple.

Utilizo en evento OnDrawCustomcell del TTreeView, pero no consigo cambiar el color.

Código Delphi [-]
  tv := TTreeview(Sender);

  DefaultDraw := False;

  // Calculo un par de zonas
  Rect1 := Node.DisplayRect(False);
  Rect2 := Node.DisplayRect(False);
  Rect1.Right := Rect1.Right div 2;
  Rect2.Left := Rect1.Right;

  // pinto el texto
  tv.Canvas.Font.Color := clBlack;
  tv.Canvas.Font.Style := tv.Canvas.Font.Style + [fsBold];
  tv.Canvas.TextRect(Rect1, Rect1.Left, Rect1.Top, Node.Text);

  // Cambio color y estilo  ¡¡¡ESTO NO FUNCIONA
  tv.Canvas.Font.Style := tv.Canvas.Font.Style - [fsBold];
  tv.Canvas.Font.Color := clRed;
  tv.Canvas.TextRect(Rect2, Rect2.Left, Rect2.Top, 'Texto rojo');

El segundo texto que debería salir en rojo y sin negrita sigue saliendo igual que el otro.
¿Alguna sugerencia? Estoy espeso hoy y me debo estar dejando algo...
__________________
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
  #2  
Antiguo 19-06-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
No es la primera vez, ni eres el primero en tener este problema. Un miembro de StackOverflow tuvo el mismo.

Te daré la misma solución que dí en stackoverflow en ese momento. http://stackoverflow.com/questions/9...537896#9537896

Utiliza Canvas.Refresh luego de cambiar las propiedades de la fuente.

Código Delphi [-]
 // pinto el texto
  tv.Canvas.Font.Color := clBlack;
  tv.Canvas.Font.Style := tv.Canvas.Font.Style + [fsBold];
  tv.Canvas.TextRect(Rect1, Rect1.Left, Rect1.Top, Node.Text);

  // Cambio color y estilo  ¡¡¡ESTO NO FUNCIONA
  tv.Canvas.Font.Style := tv.Canvas.Font.Style - [fsBold];
  tv.Canvas.Font.Color := clRed;
  tv.Canvas.Refresh;  // <-- he aquí lo necesario.
  tv.Canvas.TextRect(Rect2, Rect2.Left, Rect2.Top, 'Texto rojo');

Esto lo aprendí "the hard way" cuando estaba desarrollando Biolab.

Saludos!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 19-06-2012
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
¡Vaya! Pues ¡qué cosa más rara! Estuve a punto de probar el Refresh pero pensé que eso iba a causar un stack overflow al rellamar al método de pintado. Irónicamente, la respuesta la pusiste en StackOverflow

// Saludos
Responder Con Cita
  #4  
Antiguo 19-06-2012
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
jaja así es román. A simple vista pareciera que al llamar a "refresh" entrarías en un ciclo interminable. Pero en realidad si tienes en cuenta la estructura de la VCL, sabrás que no es así. El dibujado del lienzo es controlado e instruido por el padre. No es lo mismo llamar "Form1.Refresh" dentro del evento OnPaint del formulario, a llamar "Form1.Label1.Refresh" en el mismo evento. En el primero sí entrarías en un bucle infinito. En el segundo caso, no.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #5  
Antiguo 19-06-2012
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.278
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 Chris Ver Mensaje
No es la primera vez, ni eres el primero en tener este problema. Un miembro de StackOverflow tuvo el mismo.
...
Utiliza Canvas.Refresh luego de cambiar las propiedades de la fuente.
¡¡Grande Chris!!

En estos momentos estaba así...



Mira que le he dado vueltas...

Con ese simple cambio la cosa tiene mejor pinta...



Muchas gracias.
__________________
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
  #6  
Antiguo 19-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Veo que hay buenos programadores por aquí, lo mismo me hago asiduo a estos foros
Responder Con Cita
Respuesta



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
Memo con Línea de colores Clantt Varios 8 22-12-2011 12:53:40
Pintar serie de distintos colores en un tdbchart richy08 HTML, Javascript y otros 0 28-07-2007 20:52:02
Crear un TextBox que admita colores de línea SaurioNet .NET 5 17-02-2005 19:09:44
Pintar de distintos colores los renglones de un TsDbGrid Ricsato Varios 3 01-02-2005 22:19:07
Dibujar y pintar de colores circulos cso2000 Gráficos 7 07-04-2004 19:42:08


La franja horaria es GMT +2. Ahora son las 21:09:20.


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