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 15-11-2008
Avatar de Adrian Murua
Adrian Murua Adrian Murua is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tucuman - Argentina
Posts: 45
Poder: 0
Adrian Murua Va por buen camino
Smile Cambiar color de letras de acuerdo al color de fondo

Esimados amigos:

Tengo un componente DBGRID al que le cambio el color de fondo de una fila de acuerdo a un campo de la tabla en la que realizo la consulta, esto lo hago mediante el evento DrawColumnCell del componente.

Código:
procedure TFrmMgnBancos.GrillaDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   If (Datos.MgnBancos.FieldByName('Activo').AsInteger = 1 )
    then Grilla.canvas.brush.color := clMaroon;

    Grilla.DefaultDrawColumnCell(rect,DataCol,Column,State)
end;
La duda es la siguiente, yo deseo permitir que el usuario pueda cambiar el color de fondo de la fila (mediante una personalizacion del componente ), pero me encuentro con el problema de que si el usuario elige, como en el codigo anterior, un color de fondo oscuro, en la grilla se veria ese color oscuro de fondo y las letras negras , por lo que no se podra leer bien las letras , habria alguna forma de automatizar el color de de las letras de acuerdo al color de fondo elegido, teniendo en cuenta que no estaria en los planes permitir que el usuario eliga el color de las letras?.

Desde ya Muchas Gracias.
__________________
Adrián Murúa.
Responder Con Cita
  #2  
Antiguo 15-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, puedes buscar el negativo del color :

Código Delphi [-]
color_neg := $FFFFFF xor color;

o bien comparar luminosidades, y poner ciertos colores fijos (blanco, gris, negro, etc...) segun esta. Para calcularla tansolo tendras que sumar las componentes r,g,b de cada uno :

Código Delphi [-]
function Red(c : TColor) : integer;
begin
        Red := c and $FF;
end;

function Green(c : TColor) : integer;
begin
        Green := (c and $FF00) div $100;
end;

function Blue(c : TColor) : integer;
begin
        Blue := (c and $FF0000) div $10000;
end;

function Lum(c : TColor) : integer;
begin
        Lum := (Red(c) + Green(c) + Blue(c)) div 3;
end;

var
  l : integer;
begin
    l := Lum(backcolor);
    if l < 64  then font.color := clWhite  else
    if l < 128 then font.color := clSilver else
    if l < 192 then font.color := clGray   else font.color := clBlack;
end;

saludos.

Última edición por coso fecha: 15-11-2008 a las 17:29:25.
Responder Con Cita
  #3  
Antiguo 15-11-2008
Avatar de Adrian Murua
Adrian Murua Adrian Murua is offline
Miembro
 
Registrado: oct 2003
Ubicación: Tucuman - Argentina
Posts: 45
Poder: 0
Adrian Murua Va por buen camino
Muchas gracias por responder, lo de las luminosidades , me salio perfecto, lo voy a implkemedntar en el control , gracias.
__________________
Adrián Murúa.
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
Como Cambiar El Color De Fondo En Una Imagen kurono Varios 2 27-11-2011 14:53:41
Cambiar el color de fondo de un Edit o DBEdit FGarcia Varios 7 15-05-2007 21:20:19
Cambiar color de fondo en un DBgrid Alexis De la Cr Conexión con bases de datos 5 02-06-2006 23:25:59
Cambiar el color de fondo de varios componentes... alt126 C++ Builder 1 05-02-2005 12:47:41
Cambiar el color de fondo de un TTextBrowser ruina Lazarus, FreePascal, Kylix, etc. 4 26-06-2004 16:52:13


La franja horaria es GMT +2. Ahora son las 11:00:15.


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