Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
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 21-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Talking Cambiar el color en una celda de un DBGrid

Saludos.

Bueno haber si me aclaro y alguien me aclara.

Necesito cambiar de color una celda de un DBGrid que cumpla una condición, como por ejemplo toda aquella del campo SALDO que contenga un número menor que 0.

Estoy dándole vueltas a este código, pero no se que falla.

if Column.Field.Dataset.FieldbyName('SALDO').AsFloat < 0
then
if (gdFocused in State)
then DBGCaja.Columns[4].color := clRed
else
DBGCaja.canvas.brush.color := clRed;
DBGCaja.DefaultDrawColumnCell(rect,DataCol,Column,State);

El resultado de este código es que pinta de color rojo toda la linea completa o sea todos los campos ( fecha,concepto,ingreso,gasto,saldo)

Y solo necesito que lo haga en el campo saldo.

Espero haberme explicado.

Gracias
Responder Con Cita
  #2  
Antiguo 21-02-2008
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Usa el evento OnDrawCell. Allí pon los condicionantes que quieras y usa la propiedad Canvas del DBGrid.
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
  #3  
Antiguo 21-02-2008
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Cita:
Empezado por RoyTan Ver Mensaje

if Column.Field.Dataset.FieldbyName('SALDO').AsFloat < 0
then
if (gdFocused in State)
then DBGCaja.Columns[4].color := clRed
else
DBGCaja.canvas.brush.color := clRed;
DBGCaja.DefaultDrawColumnCell(rect,DataCol,Column,State);
En el ELSE deberías poner otro color ¿no?
__________________
Rafita.
Responder Con Cita
  #4  
Antiguo 21-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Nada de nada.

Sigue sin funcionar.
Responder Con Cita
  #5  
Antiguo 22-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
He probado de todas formas y nada.

Bueno pues se quedará sin el colorcito.

Gracias.
Responder Con Cita
  #6  
Antiguo 22-02-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Este tema ya ha sido tratado en múltiples ocasiones en los foros.

Seguro que utilizando la búsqueda encontrarías muchas referencias. No obstante, para que veas que en Delphi 'siempre' se puede, te invito a utilizar el siguiente código :

Código Delphi [-]
procedure TForm.DBGrid1DrawColumnCell(Sender: TObject;
  Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 
  If (Column.Index = 5) and (Column.Field.Dataset.FieldbyName('SALDO').AsFloat < 0) and (not DataSet.IsEmpty) then begin
    if gdFocused in State then begin
      DBGrid1.Canvas.Brush.Color := clBlue    // Color que quieras que tenga el fondo si la línea tiene foco
      DBGrid1.Canvas.Font.Color  := clWhite   // Color del Font que quieras que tenga si la línea tiene foco
    end
    else begin
      DBGrid1.Canvas.Brush.Color := clRed;    // Color que quieras que tenga si la línea NO tiene foco
      DBGrid1.Canvas.Font.Color  := clWhite   // Color del Font que quieras que tenga si la línea NO tiene foco
    end;
  end;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 
end;

Siendo Column.Index = al número de columna que quieras colorear. También podrías hacer referencia a dicha columna por el campo que se encuentra en ella.

DataSet es el DataSet asociado a tu DBGrid.

... y nunca desesperes si algo no te funciona
__________________
Piensa siempre en positivo !

Última edición por gluglu fecha: 22-02-2008 a las 13:03:04.
Responder Con Cita
  #7  
Antiguo 22-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Siempre pienso en positivo,
raramente desespero,
he buscado en el foro,
eso sí, seguramente no he buscado bien.

Pero esto sigue sin funcionar, probablemente este haciendo algo mal, eso es seguro.

Seguimos intentandolo.

Gracias.
Responder Con Cita
  #8  
Antiguo 22-02-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Si pones tu código aquí, a lo mejor será más fácil ayudarte.

Supongo que bastaría con que pusieras el evento OnDrawColumnCell del DBGrid.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #9  
Antiguo 23-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Hola gluglu.

Gracias por soportar mi ignorancia y mi pesadez.

Si el código lo he puesto en el evento ondrawcolumncell.

El código que me has pasado pinta la linea completa, pero eso no es lo que necesito.

Yo necesito que pinte una celda nada más, no la linea completa.
Ejemplo:

Mi DBGrid tiene 5 columnas, Fecha,Concepto,Ingresos,Gastos y Saldo.

Tan solo necesito que si en la columna saldo hubiese algun valor negativo pues sencillamente que pinte esa celda de rojo, solo donde está el valor negativo.

Bueno y el código con el que lo estoy intentando es el siguiente.

procedure TF_Caja.DBGCajaDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin

if Column.Field.Dataset.FieldbyName('SALDO').AsFloat < 0 then
if (gdFocused in State) then
Begin
DBGCaja.canvas.brush.color := clBlue;
end
else
Begin
DBGCaja.Columns[5].Font.Color := clRed; // este para el Texto
DBGCaja.DefaultDrawColumnCell(rect,DataCol,Column,State);
end;

End;

Espero y deseo no molestar mucho.

Gracias.
Responder Con Cita
  #10  
Antiguo 23-02-2008
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
no soy un experto...

solo tome el codigo de GLUGLU y lo adapte al tuyo...

Código Delphi [-]
 
 if (Column.Index = 2) and (Column.Field.Dataset.FieldbyName('PRECIO').AsFloat < 0) then  //cambie esta linea (bueno la adapte)
     if (gdFocused in State) then    
     Begin      
         DBGrid1.canvas.brush.color := clBlue;    
     end    
     else    
     Begin      
         DBGrid1.Canvas.Font.Color := clRed; //Cambie esta linea
         DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
     end;



espero te funcione..... por que a mi si

Gracias por el codigo GLUGLU....

salu2!!!!!!!!
Responder Con Cita
  #11  
Antiguo 23-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Vendito sea Dios todopoderoso, salió.

Gracias Jandock238 y gracias gluglu.

Creo y casi seguro, que soy el hombre mas torpe del mundo.
Lo mio no tiene remedio vamos.

Gracias a todos.
Responder Con Cita
  #12  
Antiguo 23-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Hasta para escribir soy torpe, bendito se escribe con B no con V.

Lo siento.
Responder Con Cita
  #13  
Antiguo 23-02-2008
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
Cita:
Empezado por RoyTan Ver Mensaje
Hasta para escribir soy torpe, bendito se escribe con B no con V.

Lo siento.
y hasta para copiar... (es broma) ....
mi Nick no lleva 'C' es Jandok238 sin 'C' ...

salu2!!!!!!!!!
Responder Con Cita
  #14  
Antiguo 24-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Po zi. Je Je Je

Gracias Jandok238

Saludos.
Responder Con Cita
  #15  
Antiguo 13-02-2009
Avatar de dmassive
dmassive dmassive is offline
Miembro
 
Registrado: mar 2004
Ubicación: Paraná - Argentina
Posts: 60
Poder: 21
dmassive Va por buen camino
Question

Tengo una duda:

¿Para que sirve verificar si tiene foco?
Código Delphi [-]
 if (Column.Index = 2) and (Column.Field.Dataset.FieldbyName('PRECIO').AsFloat < 0) then  
     if (gdFocused in State) then    
     Begin      
         DBGrid1.canvas.brush.color := clBlue;    
     end    
     else    
     Begin      
         DBGrid1.Canvas.Font.Color := clRed;
         DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
     end;

pues si lo hago de esta manera funciona igual:

Código Delphi [-]
 if (Column.Index = 2) and (Column.Field.Dataset.FieldbyName('PRECIO').AsFloat < 0) then
     Begin      
         DBGrid1.Canvas.Font.Color := clRed;
         DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
     end;
__________________
"It's nice to be important, but it's more important to be nice"
Responder Con Cita
  #16  
Antiguo 13-02-2009
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
Esa comparacion es solo para cambiar el COLOR si la fila tiene el foco ....

si la fila tiene el foco, en lugar de pintarla ROJA, la pinta AZUL ....

salu2!!!!!!!
Responder Con Cita
  #17  
Antiguo 14-02-2009
Avatar de dmassive
dmassive dmassive is offline
Miembro
 
Registrado: mar 2004
Ubicación: Paraná - Argentina
Posts: 60
Poder: 21
dmassive Va por buen camino
Red face

ah, pues, es que mi duda surgio porque jamas aparecio el color azul en todo el DBGrid... es por eso que no saco a qué foco se refiere, el codigo se ve logico, pero, en el DBGrid no aparece ningun azul por ningun lado...
__________________
"It's nice to be important, but it's more important to be nice"
Responder Con Cita
  #18  
Antiguo 14-02-2009
jandok238 jandok238 is offline
No confirmado
 
Registrado: ago 2007
Ubicación: ¿ǝɯ dlǝɥ noʎ uɐɔ 'ʍouʞ ʇ,uop ı
Posts: 415
Poder: 0
jandok238 Va por buen camino
Cita:
Empezado por dmassive Ver Mensaje
ah, pues, es que mi duda surgio porque jamas aparecio el color azul en todo el DBGrid... es por eso que no saco a qué foco se refiere, el codigo se ve logico, pero, en el DBGrid no aparece ningun azul por ningun lado...

perdon... tienes razon ... no habia checado bien el codigo ....

ahi va... ahora si... bien revisado ...

Código Delphi [-]
if (gdFocused in State) then
     Begin
         DBGrid1.canvas.Font.color := clBlue; //Corregir la linea, cambiar bursh  por  font
         DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);  //Faltaba esta linea
     end
     else
     Begin
         DBGrid1.Canvas.Font.Color := clRed;
         DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
     end;


ahora si, si la celda tiene el foco, las letras toman el color especificado...

salu2!!!!!!!
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
forma de cambiar el color de una celda anubis Varios 8 31-07-2007 20:08:02
DBGrid Color Celda hcalero Varios 2 13-04-2007 14:37:42
Cambiar el color a una celda de un DBGrid NuncaMas Varios 1 14-02-2005 17:40:30
Cambiar Color una Celda del DbGrid Rabata Varios 5 02-09-2004 10:31:01
Cambiar el color de una celda de un DBGrid candido OOP 2 06-08-2004 11:22:28


La franja horaria es GMT +2. Ahora son las 14:04:10.


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