GARANTIR DESCONTO

Fórum Cor de Valor Negativo no DBGrid #264726

10/01/2005

0

pessoal
gostaria de mudar a cor da fonte de um valor negativo no meu DBGrid...
a rotina eu já tenho.. só que minha coluna são todas centralizadas e quando coloco a rotina abaxio, o registro que tem um valor negativo ficam todos desalinhados. Alguma sugestão ?

rotina usada:
procedure TFrm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (VAlor < 0)then
  begin
    with DBGrid.Canvas do
    begin
      Font.Color  := clRed;
      FillRect(Rect);
      TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
    end;
  end;
end;



Diogoalles

Diogoalles

Responder

Posts

10/01/2005

Massuda

A procedure TCanvas.TextOut não alinha texto... use DrawText da API do Windows para alinhar o texto dentro de um retângulo:
procedure TFrm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; 
  DataCol: Integer; Column: TColumn; State: TGridDrawState); 
var
  S: string;
begin 
  if (VAlor < 0)then 
  begin 
    with DBGrid.Canvas do 
    begin 
      Font.Color  := clRed; 
      FillRect(Rect); 

      S := Column.Field.AsString;
      DrawText(Handle, PChar(S), Length(S), Rect, DT_CENTER or DT_VCENTER); 
    end; 
  end; 
end;



Responder

Gostei + 0

10/01/2005

Diogoalles

Olá Massuda
obrigado pela dica
só que está me dando um erro q não consegui resolver

usei a mesma rotina que vc passou e ocorre o erro:

[color=red:e26e66bd3d][Error] Gcm931P.pas(330): Constant object cannot be passed as var parameter[/color:e26e66bd3d]

saberia me dizer o q é ?

obrigado

Diogo


Responder

Gostei + 0

10/01/2005

Diogoalles

complementando,
o erro ocorre na linha:

  DrawText(Handle, PChar(S), Length(S), [color=red]Rect[/color], DT_CENTER or DT_VCENTER);


e aponta onde diz ´Rect´


Responder

Gostei + 0

10/01/2005

Massuda

Desculpe... não tinha testado. Assim deve funcionar:
procedure TFrm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; 
  DataCol: Integer; Column: TColumn; State: TGridDrawState); 
var 
  S: string; 
  R: TRect;
begin 
  if (VAlor < 0)then 
  begin 
    with DBGrid.Canvas do 
    begin 
      Font.Color  := clRed; 
      FillRect(Rect); 

      S := Column.Field.AsString; 
      R := Rect;
      DrawText(Handle, PChar(S), Length(S), R, DT_CENTER or DT_VCENTER); 
    end; 
  end; 
end;



Responder

Gostei + 0

11/01/2005

Diogoalles

Blz Massuda.. tudo ok,
essa rotina centraliza todas as colunas,
caso eu tenha uma coluna q deva ser alinhada a esquerda como eu posso encaixar nessa função?

obrigado


Responder

Gostei + 0

11/01/2005

Massuda

caso eu tenha uma coluna q deva ser alinhada a esquerda como eu posso encaixar nessa função?

No mesmo evento OnDrawColumnCell, você pode tratar individualmente cada coluna conforme o valor de DataCol ou de Column.

Para ter diferentes alinhamentos, basta mudar o último parametro de DrawText conforme sua necessidade; DrawText alinha tanto na horizontal (esquerda, centro, direita) como na vertical (topo, centro, fundo) além de fazer algumas outras mágicas... veja mais detalhes [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_0odw.asp]neste link[/url].


Responder

Gostei + 0

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

Aceitar