Do fórum ClubeDelphi:
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 minha rotina, o registro que tem valor negativo fica todo desalinhado
Você está usando a procedure TCanvas.TextOut que não alinha texto... use DrawText da API do Windows para alinhar o texto dentro de um retângulo:
1 procedure TForm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; 2 DataCol: Integer; Column: TColumn; State: TGridDrawState); 3 var 4 S: string; 5 R: TRect; 6 begin 7 if Column.Field.AsDouble < 0 then begin 8 9 with DBGrid.Canvas do begin 10 11 Font.Color := clRed; 12 FillRect(Rect); 13 S := Column.Field.AsString; 14 R := Rect; 15 DrawText(Handle, PChar(S), Length(S), R, DT_CENTER or DT_VCENTER); 16 end; 17 end; 18 end;
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 neste artigo no MSDN.
Valeu Massuda, Muito boa a Sua Dica
ResponderExcluirUsei em meu sistema Comercial.
Parabéns pela colaboração
Davi Ramos
Salvador-Bahia