Italian community of Lazarus and Free Pascal

Programmazione => LCL => Topic aperto da: Fabio - Aprile 19, 2012, 05:31:32 pm

Titolo: Colorare le righe di un TDBGrid
Inserito da: Fabio - Aprile 19, 2012, 05:31:32 pm
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.

Codice: [Seleziona]
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
Codice: [Seleziona]
if MyQry.FieldByName('validita').AsDateTime
e usare
Codice: [Seleziona]
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.