Расширение DBGrid некоторыми цветами строк - PullRequest
3 голосов
/ 08 марта 2012

Я хочу расширить функциональность DbGrid для добавления цветов в нечетные и четные строки. Итак, я написал это

procedure TGridx.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var
  row : Integer;
begin
   inherited;
  row := Self.DataSource.DataSet.RecNo;
  if (row mod 2 = 0) then
    Self.Canvas.Brush.Color := FColor1  //some color
  else
    Self.Canvas.Brush.Color := FColor2; //some color

end;

Что я делаю не так?

Ответы [ 4 ]

5 голосов
/ 08 марта 2012

Событие, которое вы хотите, называется DBGridDrawColumnCell, и вам нужно решить, включить или отключить свойство DefaultDrawing, и способ обработки DBGridDrawColumnCell изменится соответственно. В вашем случае вы просто устанавливаете цвета, но оставляете DefaultDrawing равным true и не делаете никаких других холстов. Текстовое или GDI-рисование.

Недавний вопрос, который я задал здесь , показал, что в более поздних версиях Delphi (2010, Xe, Xe2) вам также иногда нужно вызывать Canvas.Refresh для TDBGRID и TListView при изменении свойств холста в событиях ownerdraw но это не относится к Delphi 7.

1 голос
/ 09 марта 2012

Вы должны попробовать также бесплатное решение для 3d-вечеринок, которое уже значительно расширяет возможности DBGrid, подобно тем, которые предоставляются проектом Jedi

0 голосов
/ 08 марта 2012

Попробуйте также нарисовать ячейку после определения цвета кисти:

Self.Canvas.FillRect(ARect);
0 голосов
/ 08 марта 2012

Opc0de, может быть, вам следует переопределить не метод "DrawCell", а "DrawCellBackground"?

...