Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Color de fuente en celda (https://www.clubdelphi.com/foros/showthread.php?t=59703)

Besto 05-09-2008 08:12:19

Color de fuente en celda
 
Hola,

tengo un problema para cambiar el color de una celda en un dbgrid.
De primeras me va bien, pero cuando cambio de un color a otro me lo cambia con un registro de retraso, es decir, el primer registro del otro color me lo pone con el color anterior.

Os pongo el código que uso:

Código Delphi [-]
procedure Tformulario1.BaseEquiDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  with Sender as TDBGrid do
    begin
      if (datacol=4) then
        begin
          case frDatos.tbEqu.FieldByName('Estado').AsInteger of
            1: begin
                 columns[4].Font.Color := $009900;
               end;
            3: begin
                 columns[4].Font.Color := $FF0000;
                 columns[4].Font.Style := [fsBold];
               end;
            25: begin
                 columns[4].Font.Color := $FF9900;
                 columns[4].Font.Style := [fsBold];
               end;
            26: begin
                 columns[4].Font.Color := $FF00CC;
                 columns[4].Font.Style := [fsItalic];
               end;
          end;
        end;
    end;
  BaseEqui.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

No sé que puede estar mal, he estado mirando por los foros y en principio parece que es así, no he encontrado nada.

coso 05-09-2008 09:08:39

prueba, en vez de
Código Delphi [-]
frDatos.tbEqu.FieldByName('Estado').AsInteger

de hacer

Código Delphi [-]
(sender as TDBGrid).DataSource.DataSet.FieldByName('...
.

Si no funciona, buscaria por el foro '.ActiveRecord' (o '.currentrecord', uno de dos), que es el registro realmente activo en el momento de pintar.

tcp_ip_es 05-09-2008 09:16:53

métele esto....

Código Delphi [-]
procedure Tformulario1.BaseEquiDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
 if  frDatos.tbEqu.recordcount >0 then
 begin
 if  state <> [gdfocused] then 
 begin  
  with Sender as TDBGrid do
    begin
      if (datacol=4) then
        begin
          case frDatos.tbEqu.FieldByName('Estado').AsInteger of
            1: begin
                 columns[4].Font.Color := $009900;
               end;
            3: begin
                 columns[4].Font.Color := $FF0000;
                 columns[4].Font.Style := [fsBold];
               end;
            25: begin
                 columns[4].Font.Color := $FF9900;
                 columns[4].Font.Style := [fsBold];
               end;
            26: begin
                 columns[4].Font.Color := $FF00CC;
                 columns[4].Font.Style := [fsItalic];
               end;
          end;
        end;
    end;
 end;
 BaseEqui.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;

P.D. Lo que va en negrita es lo nuevo, creo que te falla por no controlar el estado ya nos contarás...

Besto 05-09-2008 11:32:35

He probado con las dos ideas y me pasa lo mismo, no se corrige. No puedo mandar la imagen porque no se pero es algo así:

EN RESERVA
ACTIVO
ACTIVO
EN RESERVA
EN RESERVA

El primer Activo tenia que ir tambien en el otro color y no sale-

tcp_ip_es 05-09-2008 11:41:10

uhmmmm prueba a sustituir los ...

Código Delphi [-]
columns[4].Font.Color := $009900;

por....

Código Delphi [-]
DBGrid.canvas.Font.Color:=$009900;

coso 05-09-2008 12:38:03

en vez de columns[4].color, usa DBGrid.Canvas.Font.Color

coso 05-09-2008 12:38:33

lo de tcp_ip, q escribi directo desde el email

Caro 05-09-2008 13:22:04

Holas, no solo el ....font.color debe cambiar, todo donde tiene columns[4] debe cambiarlo por BaseEqui.Canvas, no debería importar si es el registro actual, ya que cuando se da este evento hace un recorrido por todo el dbGrid para realizar el pintado. Ahora si se quiere pintar de otro color el que esta selecionado entonces habra que preguntar si el state esta como gdSelected.

Saluditos

tcp_ip_es 08-09-2008 07:23:48

y bien....??? Besto ¿qué pasó al final? ¿lo solucionaste con las Gambas?? uppps perdón con los Canvas.... :D


P.D. Lo sé es un chiste muuuu malo pero que queréis son las 8:30 de la mañana :cool:

Besto 11-09-2008 07:20:17

Perdonar el retraso pero he estado un par de días desconectado de Delphi.

Muchas gracias, funciona perfecto como me dijisteis, cambiando por dbgrid.canvas el columns[4]

Sois unos fenomenos.


La franja horaria es GMT +2. Ahora son las 12:41:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi