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;
它的工作,但当我尝试更改颜色更改所选择的单元格,以及第一个单元格idk为什么。
当我选择3个红色的单元格时。 (工作正常)
更改另一个细胞的颜色,更改第一个细胞T.T
http://i.stack.imgur.com/umG0r.png http://i.stack.imgur.com/1o93C.png
HELP !!!
答案 0 :(得分:2)
如果只想为选定的单元格着色,则必须检查传入的State参数,并且只有在选择了State时才绘制。
此外,您正在该例程中绘制单元格3x。只需输入MatrizGeneral.Canvas.FillRect(Rect);一旦结束,每个IF块都不需要它。
答案 1 :(得分:0)
我使用此例程为使用radiogroup选择的单元格着色:
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;
端;
很棒!