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 |
Usa el evento OnDrawCell. Allí pon los condicionantes que quieras y usa la propiedad Canvas del DBGrid.
|
Cita:
|
Nada de nada.
Sigue sin funcionar.:confused: |
He probado de todas formas y nada.
Bueno pues se quedará sin el colorcito. Gracias.:mad::confused: |
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 :
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 ;) |
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. |
Si pones tu código aquí, a lo mejor será más fácil ayudarte. :rolleyes:
Supongo que bastaría con que pusieras el evento OnDrawColumnCell del DBGrid. |
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.:o Gracias. |
no soy un experto... :D:D
solo tome el codigo de GLUGLU y lo adapte al tuyo...
espero te funcione..... por que a mi si ;):D:D Gracias por el codigo GLUGLU.... salu2!!!!!!!! |
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.:):):) |
Hasta para escribir soy torpe, bendito se escribe con B no con V.
Lo siento. |
Cita:
mi Nick no lleva 'C' es Jandok238 sin 'C' ...:D:D:D salu2!!!!!!!!! |
Po zi. Je Je Je:D:D:D
Gracias Jandok238 Saludos. |
Tengo una duda:
¿Para que sirve verificar si tiene foco?
pues si lo hago de esta manera funciona igual:
|
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!!!!!!! |
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... :)
|
Cita:
perdon... tienes razon ... no habia checado bien el codigo .... ahi va... ahora si... bien revisado ... :o:o
ahora si, si la celda tiene el foco, las letras toman el color especificado... :D salu2!!!!!!! |
La franja horaria es GMT +2. Ahora son las 15:23:17. |
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