Dbgrid с цветными ячейками VI
Установите defaultDrawing в false, и создайте собственный onDrawDataCell, в котором и задавайте нужный вам цвет ячеек. Примерно так:
procedure Tform1.DBgrid1DrawDataCell (Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin { выберите цвет для текста (font.color) и фона (brush.color) } if (field = table1Status) then begin { белый на красном } DBgrid1.canvas.font.color := clWhite; DBgrid1.canvas.brush.color := clRed; end else begin { черное на белом } DBgrid1.canvas.brush.color := clWhite; DBgrid1.canvas.font.color := clBlack; end; { рисуем ячейку } DBgrid1.canvas.textrect (rect,rect.left+2,rect.top+2,field.asString); end; procedure TMainForm.CharGridDrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState); var TheText: string; begin TheText := CharGrid.Cells[Col, Row]; with CharGrid.Canvas do begin { Определяем цвет фона в зависимости от состояния ячейки: } if gdFocused in State then Brush.Color := clYellow {Цвет ячейки с фокусом} else if gdSelected in State then Brush.Color := clOlive {Цвет выбранной ячейки} else {ячейка не имеет фокуса и не выбрана} if IntFromStr(TheText) <> 0 then Brush.Color := clNavy {Цвет фона подсвеченной ячейки} else Brush.Color := clWhite; {Цвет фона нормальной ячейки} { Определяем цвет текста: } if IntFromStr(TheText) <> 0 then Font.Color := clRed {Цвет текста подсвеченной ячейки} else Font.Color := clNavy; {Цвет текста нормальной ячейки} TextRect(Rect, Rect.Left + 2, Rect.Top + 2, TheText); end; {with CharGrid.Canvas} end; |
[001501]