Dbgrid zebrado conforme a data

Delphi

26/06/2006

Galera tenho um Dbgrid que fica zebrado indicando o dia assim:


o código é assim no dbgrid
 if not(gdSelected in State) then
  begin
    if (Data <> DadosDATA.Value) then
    begin
      Data := DadosDATA.Value;
      if Cor = $00E8E8E8 then
        Cor := clWhite
      else
        Cor := $00E8E8E8;
    end;

    with (Sender as TDBGrid) do
    begin
      Canvas.Brush.Color := Cor;
      DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
  end;


private do form
Data : tdate;
Cor = color;
ps: código enviado por: FERNANDO AZE

Só que quando me movimento no grid eu perco a zebragem inicial correta
fica assim:

alguém tem alguma idéia de como eu poderia corrigir esse erro???

Thanks


Marcos Fernando

Marcos Fernando

Curtidas 0

Respostas

Paullsoftware

Paullsoftware

26/06/2006

Aqui funciona normalmente comigo...
no evento DBGrid1DrawColumnCell

    if ( DM_BANCO.LOCACAO.FieldByName(´DATARETORNO´).Value < SelData.Date ) then
     begin
     DBGrid1.Canvas.Font.Color := clRed;
     DBGrid1.Canvas.Font.Style := [];
     DBGrid1.Canvas.FillRect(Rect);
     DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
     end;
    if ( gdSelected in State ) then
     begin
      if ( DM_BANCO.LOCACAO.FieldByName(´DATARETORNO´).Value < SelData.Date ) then
       begin
         DBGrid1.Canvas.Font.Color := clYellow;
         DBGrid1.Canvas.Font.Style := [fsBold];
         DBGrid1.Canvas.FillRect(Rect);
         DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
       end
      else
       begin
         DBGrid1.Canvas.Font.Color := clWhite;
         DBGrid1.Canvas.Font.Style := [fsBold];
         DBGrid1.Canvas.FillRect(Rect);
         DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
       end
     end;


espero ter ajudado :wink:


GOSTEI 0
Marcos Fernando

Marcos Fernando

26/06/2006

obrigado [b:e2a33cc9c5]paullsoftware[/b:e2a33cc9c5] mas preciso saber qual a uses para (SelData.Date)

thanks


GOSTEI 0
Massuda

Massuda

26/06/2006

Seu código não funciona direito porque você está assumindo que o grid é desenhado sequencialmente, o que não é verdade. O desenho do grid (e, consequentemente, a geração do evento de desenho) é feito conforme a necessidade. Por exemplo, se você mover um outro form sobre parte do grid de baixo para cima, provavelmente o desenho será feito na ordem inversa que você está imaginando. Dê uma olhada [url=http://forum.clubedelphi.net/viewtopic.php?t=66283]neste tópico[/url], onde tem um problema parecido.

@paullsoftware
Pelo que entendi, seu código desenha com cor diferente os registros que tem data (de retorno?) anterior a uma determinada data (escolhida no SelData). Isso é um pouco diferente da situação do Marcos.


GOSTEI 0
Paullsoftware

Paullsoftware

26/06/2006

[quote:85fe1f65ce=´Marcos Fernando´]obrigado [b:85fe1f65ce]paullsoftware[/b:85fe1f65ce] mas preciso saber qual a uses para (SelData.Date)

thanks[/quote:85fe1f65ce]

op´s desculpa... é uma DataEdit da paleta RxControls mais pode ser substituido por um DateTimePick...


GOSTEI 0
Marcos Fernando

Marcos Fernando

26/06/2006

grato pela atenção amigos, só para entender

ao
[b:3f8d2b4201]paullsoftware[/b:3f8d2b4201]
como o componente é uma DataEdit onde eu indico o recebimento das inf. da base de dados? pois no cód. que me passou só tem ref. a ele através do (SelData.Date) mas não indica onde o componente receberá o valor da tabela tipo DataEdit.date = tabelacampo.value;


thanks


GOSTEI 0
POSTAR