Fórum Ajustando Valor de quot;Célulaquot; em DBGrid #331365

17/10/2006

0

Nunca gostei muito de utilizar DBGrid, mas me vi nessa situação hoje:

Estou utilizando o código abaixo para melhorar a visualização dos dados:

DBGridDrawColumnCell;
begin
  If Odd((Sender AS TDBGrid).DataSource.DataSet.RecNo) Then
  begin
    (Sender AS TDBGrid).Canvas.Font.Color  := $00484824;
    (Sender AS TDBGrid).Canvas.Brush.Color := clWhite;
  end
  Else begin
   (Sender AS TDBGrid).Canvas.Font.Color  := clBlack;
   (Sender AS TDBGrid).Canvas.Brush.Color := $00B3FFFF;
  end;

  (Sender AS TDBGrid).Canvas.FillRect(Rect);
  (Sender AS TDBGrid).Canvas.TextOut(Rect.Left+2, Rect.Top, Column.Field.AsString);
end;


Até aí tudo bem, está funcionando normalmente, mas quando quero ´colorir´ alguma célula específica não funciona:

Eis o código que estou usando:

DBGridDrawDataCell;
If (Field.FullName = ´Quantidade´) AND (Field.AsInteger < 4) Then
  begin
    DBGrid.Canvas.Font.Color  := clYellow;
    DBGrid.Canvas.Brush.Color := $005353FF;
  end;


Algum dos amigos sabe se há algum erro aí em cima ?

Abraços e Bons Códigos :wink:


Paulocesar1301

Paulocesar1301

Responder

Posts

17/10/2006

Paulocesar1301

sorry... esqueci de copiar as duas ultimas linhas

(Sender AS TDBGrid).Canvas.FillRect(Rect);
(Sender AS TDBGrid).Canvas.TextOut(Rect.Left+2, Rect.Top, Field.AsString);


Responder

Gostei + 0

17/10/2006

Paulocesar1301

sorry people... minha cabeça parece não estar mais pensando hoje:

ONDrawColumnCell;
  If (Column.Field.FullName = ´Quantidade´) Then
  begin
    If (Column.Field.AsInteger < 4) Then
    begin
      (Sender AS TDBGrid).Canvas.Font.Color  := clYellow;
      (Sender AS TDBGrid).Canvas.Brush.Color := clRed;
    end
    Else If (Column.Field.AsInteger >= 4) Then
    begin
      (Sender AS TDBGrid).Canvas.Font.Color  := clWhite;
      (Sender AS TDBGrid).Canvas.Brush.Color := $00007700;
    end;
  end;

  (Sender AS TDBGrid).Canvas.FillRect(Rect);
  (Sender AS TDBGrid).Canvas.TextOut(Rect.Left+2, Rect.Top, Column.Field.AsString);


Eu só ainda não sei como coloco os dados centralizados na célula, mas isso é apenas porpurina... caso alguém saiba


Responder

Gostei + 0

17/10/2006

Renato.pavan

Colega, ultilize o mesmo evento q vc utilizou pra fazer o grid zebrado, tenho um exemplo funcionando da forma que vc precisa mas esta em casa, caso vc não consiga resolver posta ai que posto o exemplo que tenho amanhã.

[]´s

Renato.


Responder

Gostei + 0

17/10/2006

Renato.pavan

Eu só ainda não sei como coloco os dados centralizados na célula, mas isso é apenas porpurina... caso alguém saiba


Centralizando...
var
   i: integer;
   s: string;
begin
   s := Column.Field.Text
   i := DBGrid1.Canvas.TextWidth( s );
   DBGrid1.Canvas.TextOut(Rect.Left + (Rect.Right - Rect.Left - i) div 2, Rect.Top + 2, s);
end;



Responder

Gostei + 0

17/10/2006

Paulocesar1301

Brow!!!
Show de bola !!!
Valeu msm !!!

No que precisar e eu puder ajudar... é só falar !!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar