Автор: Марина Прядко
Будем обрабатывать событие OnDrawCell. Фон всех ячеек будет красным, а ячеек во втором стобце - синим.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); const //здесь определяем Ваш цвет. ColorBlue = TColor($FFCCCC); ColorRed = TColor($CCCCFF); begin //Если ячейка получает фокус, то нам надо закрасить её другими цветами if (gdFocused in State) then begin StringGrid1.Canvas.Brush.Color := clBlack; StringGrid1.Canvas.Font.Color := clWhite; end else //Если же ячейка теряет фокус, то закрашиваем её красным и синим if ACol = 2 then //Вторая колонка будет синей , другие - ячейки красными StringGrid1.Canvas.Brush.color := ColorBlue else StringGrid1.canvas.brush.Color := ColorRed; //Теперь закрасим ячейки, но только, если ячейка не TitleRow/TitleColumn if (ACol > 0) and (ARow > 0) then begin //Закрашиваем фон StringGrid1.Canvas.FillRect(Rect); //Выводим текст StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]); end; end;
Теперь раскрасим DBGrid. Раскрасим строки с записями о сотрудниках, работающих в Департаменте1, красным цветом, а остальные - синим. Будем обрабатывать событие OnDrawColumnCell
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const ColorBlue = TColor($FFCCCC); ColorRed = TColor($CCCCFF); begin //Если ячейка имеет фокус, то она закрашивается черным if (gdFocused in State) then DBGrid1.Canvas.Brush.Color := clBlack else //Если сотрудник работает в Департаменте1, то устанавливаем красный цвет, иначе - синий if trim(Column.Field.Dataset.FieldByName('department').AsString) = 'Департамент1' then DBGrid1.Canvas.Brush.Color := ColorRed else DBGrid1.Canvas.Brush.Color := ColorBlue; //И закрашиваем ячейку DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State) end;