Советы по Delphi

       

Dbgrid с цветными ячейками I


Не знаю, помогу ли я Вам, но я расскажу как можно изменить цвет отдельных ячеек GBGrid без необходимости создания нового компонента. Я только что протестировал этот код....

Я создал форму, поместил на ней компонент TTable и указал ему на таблицу EMPLOYEE.DB в базе данных DBDEMOS. Затем я разместил на форме Datasource и DBGrid, "соединил" их и получил живые данные.

Для демонстрации данной технологии я выбрал поле "номер служащего" в таблице EMPLOYEE.DB и "покрасил" ячейки с нечетными числами. То есть, если число нечетное, красим ячейку в зеленый цвет.

Единственный код расположился в обработчике события OnDrawColumnCell компонента DBGrid и выглядел он так:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:
TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
holdColor: TColor;begin
holdColor := DBGrid1.Canvas.Brush.Color; {сохраняем оригинальный цвет}if Column.FieldName = 'EmpNo' then {"раскрашиваем" ячейки только для поляEmpNo}
if (Column.Field.AsInteger mod 2 <> 0) then beginDBGrid1.Canvas.Brush.Color := clGreen;DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);DBGrid1.Canvas.Brush.Color := holdColor;end;end;

В данном случае мы использовали метод DefaultDrawColumnCell компонента TCustomDBGrid, являющегося родителем для TDBGrid. Он раскрасил зеленым цветом нечетные ячейки поля EmpNo. [000067]


Есть ли какой-либо способ придать ячейке DBGrid другой цвет? Мне хотелось бы выделить отдельные ячейки строки по определенному признаку. Типа флага, который, если если счет просрочен свыше 90 дней, делает строчку красной. Буду благодарен за любую помощь.

Обработайте событие OnDrawDataCell. Вот пример, который использует демонстрационную таблицу COUNTRY и рисует текст красным цветом во всех строках, содержащих страны с населением свыше 10 миллионов человек:

beginif Table1.FieldByName('Population').AsFloat < 10000000 thenDBGrid1.Canvas.Font.Color := clRed;dbGrid1.DefaultDrawDataCell(Rect,Field,State);end;

[000403]



Содержание раздела