Appunto la procedura per colorare o meno le righe/celle di un TDBGrid a seconda dei casi, in questo esempio la condizione è un campo data, se inferiore alla data odierna colora di rosso se vicino a scadenza (3 mesi) colora di giallo.
MyQry è una TSQLQuery.
procedure TMyForm.MyGridPrepareCanvas(sender: TObject; DataCol: Integer;
Column: TColumn; AState: TGridDrawState);
begin
// Escludo la cella selezionata se no non si distingue la riga
if (AState=[gdSelected, gdFocused]) then
Exit;
// In rosso i rinnovi mancanti o scaduti
if MyQry.FieldByName('validita').AsDateTime < Date then
begin
with (sender as TDBGrid) do
begin
Canvas.Brush.Color:=clRed;
Canvas.Font.Color:=clWhite;
Canvas.Font.Style:=[fsBold];
end;
end
// In giallo i rinnovi a scadenza
else if MyQry.FieldByName('validita').AsDateTime < IncMonth(Date, 3) then
begin
with (sender as TDBGrid) do
begin
Canvas.Brush.Color:=clYellow;
Canvas.Font.Color:=clRed;
end;
end;
end;
In caso non si volesse colorare la riga ma solo una certa colonna adattare togliendo
if MyQry.FieldByName('validita').AsDateTime
e usare
if Column.FieldName='validita' then
begin
if Column.Field.AsDateTime < Date then
begin
{...}
end;
end;
Ovviamente il codice è da ottimizzare ma è giusto per annotare il funzionamento.