Как покрасили ячейку StringGrid Delphi XE2?

Я начну с Delphi. У меня проблема с TStringGrid и Colored the Cell. Я использую этот код для цвета фона, когда выбран:

procedure TForm_Matrix.MatrizGeneralDrawCell(Sender: TObject;
  ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  ACol:=MatrizGeneral.Col;
  ARow:=MatrizGeneral.Row;
  begin
    if (RBAlto.Checked = True) then // Nivel de color ROJO - ALTO
      MatrizGeneral.Canvas.Brush.Color :=clRed;
      MatrizGeneral.Canvas.FillRect(Rect);
    if (RBMedio.Checked = True) then
      MatrizGeneral.Canvas.Brush.Color :=clYellow;
      MatrizGeneral.Canvas.FillRect(Rect);
    if (RBBajo.Checked = True) then
      MatrizGeneral.Canvas.Brush.Color :=clLime;
      MatrizGeneral.Canvas.FillRect(Rect);
  end;
end;

Его работа, но когда я пытаюсь изменить цвет, измените выбранную ячейку, и первая ячейка почему.

  1. Когда я выбираю 3 ячейки с красным цветом. (Работа отлично)

  2. Измените цвет другой ячейки, измените первую ячейку TT

ПОМОГИТЕ!!!

2 ответа

Если вы хотите закрасить только выделенные ячейки, вы должны проверить переданный параметр State и рисовать, только если выбрано State.

Кроме того, вы рисуете ячейку 3x в этой процедуре. Просто поместите MatrizGeneral.Canvas.FillRect(Rect); однажды в конце, вам не нужно это с каждым блоком IF.

Я использую эту рутину для окрашивания ячейки, выбранной радиогруппой:

if MatrizGeneral.Cells[ACol,ARow] <> '' then begin
case StrToInt(MatrizGeneral.Cells[ACol,ARow]) of
  0: BGColor := clRed;
  1: BGColor := clYellow;
  2: BGColor := clLime;
else
  BGColor := clWhite;
end;
with MatrizGeneral do begin
  Canvas.Brush.Color := BGColor;
  Canvas.FillRect(Rect);

  if (gdFocused in State) then
    Canvas.Font.Color := clWhite
  else
    Canvas.Font.Color := clBlack;
end;

конец;

Работает отлично!

Другие вопросы по тегам