Советы по Delphi


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]



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