Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-04-2013
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
Cambiar de color una celda de dbgrid

Muchachos, se que este tema se trató en otras publicaciones, sólo quiero una ayudita...

Quiero hacer lo siguiente: Tengo un dbgrid que me muestra el contenido de una tabla. Hay un campo llamado 'Hora de Entrada' (una columna), quiero que si el contenido de esa celda es antes de las 12 del mediodía sea de un color, y es despues sea de otro...

Tengo un código el cual funciona muy bien, pero funciona con enteros no con horas, le quise cambiar el ".asfloat" por ".astime" pero no me funciona. Donde Dice "Numero" iría el nombre del campo del tipo Time "Hora de Entrada"

El código va en el evento OnDrawColumnCell es el siguiente:

Código:
inherited;

if (Column.Index = 1) and (Column.Field.Dataset.FieldbyName('Numero').AsFloat < 12) then
 Begin
  TDrawGrid(sender).canvas.Brush.Color := clGreen;
  TdbGrid(sender).DefaultDrawColumnCell(Rect, Datacol, Column, State);
 end;
Espero que puedan ayudarme.

Muchas gracias por su tiempo.

Saludos.
Responder Con Cita
  #2  
Antiguo 17-04-2013
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.282
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
Revisa la función HourOf de DateUtils (y el resto de funciones de esa unit). con eso deberías poder extraer la hora del campo y con ese valor comparar para saber el color a utilizar.
__________________
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
  #3  
Antiguo 17-04-2013
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
Le busco la vuelta pero nada funciona... Si le pongo "Asstring" el sistema levanta pero me marca cualquier cosa.

El campo es del tipo TTime y debería funcionar el "AsDateTime" pero no funciona. La verdad no se que ponerle...

Saludos.
Responder Con Cita
  #4  
Antiguo 17-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola zeta2.

Código Delphi [-]
procedure TForm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
  CCOLOR : array [Boolean] of TColor = (clLime, clMoneyGreen);
begin
  with Sender as TDBGrid do
  begin
    if Column.Field.FieldName = 'Hora_de_Entrada' then  // Nombre del campo DateTime
      Canvas.Brush.Color := CCOLOR[Frac(Column.Field.AsDateTime) > 0.5];
    DefaultDrawColumnCell(Rect, Datacol, Column, State);
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 17-04-2013
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
Lo probe y funciona, sólo que me marca todos los campos con contenido de un color y los nulos de otro... donde especifico que quiero pintar las celdas que tienen antes de las 12:00:00? donde dice "> 0.5"?

Gracias por ayudarme...

Saludos.
Responder Con Cita
  #6  
Antiguo 17-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Había entendido que querías de un color las celdas de valor menor al mediodia y de otro las que eran despues.

Si se trata de pintar sólo las de valor menor sería:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with Sender as TDBGrid do
  begin
    if Column.Field.FieldName = 'Hora_de_Entrada' then
      if Frac(Column.Field.AsDateTime) < 0.5 then
        Canvas.Brush.Color := clMoneyGreen;
    DefaultDrawColumnCell(Rect, Datacol, Column, State);
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-04-2013 a las 19:34:21.
Responder Con Cita
  #7  
Antiguo 17-04-2013
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
AHí lo entendí bien y funciona de maravilla, ahoralo que quiero saber es que significa "> 0.5", modificando eso puedo cambiar el horario de la condición? Un ejemplo si quiero que en lugar de las 12 del medio día sea las 16:00 Hs, como sería?

Saludos y gracias por tu tiempo.
Responder Con Cita
  #8  
Antiguo 17-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por zeta2 Ver Mensaje
AHí lo entendí bien y funciona de maravilla, ahoralo que quiero saber es que significa "> 0.5", modificando eso puedo cambiar el horario de la condición? Un ejemplo si quiero que en lugar de las 12 del medio día sea las 16:00 Hs, como sería?
Hola.

El tipo TDateTime está declarado como Double, la parte entera representa la fecha y la fraccionaria la hora. Esta última se manifiesta como la fracción transcurrida del día, por ejemplo:
Código:
6  h  = (1/4) => 0.25 * 24 
12 h  = (1/2) => 0.5  * 24
16 h  = (2/3) => 0.666666666666667 * 24
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 25-02-2014
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
Ecfisa, todo funcionó perfecto, tuve que hacer el cálculo de cada hora para pasarlo a double, pero es una regla de 3 simple...

Ahora me ha surgido otro problema con el mismo código.

Este código momifica toda la columna, le pone un color a la celda si el horario es antes de las 12 y otro color si es después de las 12... Todo operando con mismo valor:

Código Delphi [-]
 if Frac(Column.Field.AsDateTime) < 0.5 then

Ahora, que pasa si necesito que el valor varíe según el registro. Es decir, en el registro tengo 2 campos:

Hora_de_Entrada (Hora en la que el sistema registró su entrada)
Hora_Oficial_de_Entrada (Hora oficial establecida por la empresa, el cual no se puede pasar por que indicaría tardanza)

Se puede hacer que ese 0.5 sea reemplazado por el valor de Hora_Oficial_de_Entrada y así en cada registro?

Que la operación de cada registro sea independiente, no un valor para toda la columna...

Me explico?

Si no se entiende me dicen y busco la manera de explicarlo de nuevo.

Espero que puedan ayudarme.

Atte. Marco.
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
Cambiar color de una celda espesifica de un dbgrid carlos gonzalez Varios 1 14-12-2010 19:48:11
Cambiar el color en una celda de un DBGrid RoyTan Varios 17 14-02-2009 17:06:48
Cambiar el color a una celda de un DBGrid NuncaMas Varios 1 14-02-2005 16:40:30
Cambiar Color una Celda del DbGrid Rabata Varios 5 02-09-2004 09:31:01
Cambiar el color de una celda de un DBGrid candido OOP 2 06-08-2004 10:22:28


La franja horaria es GMT +2. Ahora son las 03:08:13.


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