Я пытаюсь создать приложение, в котором ячейки TStringGrid
меняют цвет, когда я нажимаю на них. Каждый раз, когда я нажимаю на ячейку, он должен переключиться на следующий цвет и оставаться в этом цвете до тех пор, пока я не нажму на эту ячейку снова, в порядке:Delphi 7: Как я могу изменить цвета отдельных ячеек на StringGrid, нажав на них?
белый ==> красный ==> оранжевый ==> зеленый = => белый (например, светофор).
Ошибка (ы) Я получаю немного сложно объяснить, но я попробую.
Приложение запускается, но когда я нажимаю на одну ячейку, а затем на другую, иногда первая ячейка, на которую я нажимал, меняет цвет, а второй - нет. В других случаях обе ячейки меняют цвет. В других случаях обе ячейки просто восстанавливаются до их белого состояния.
type
TForm1 = class(TForm)
StringGrid: TStringGrid;
procedure StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
arrState: array[1..4, 1..4] of Integer;
end;
procedure TForm1.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
iRow, iCol: Integer;
arrk: array[1..4, 1..4] of Integer;
begin
for iCol := 4 downto 1 do
begin
for iRow := 4 downto 1 do
begin
if (gdSelected in State) then
begin
case arrState[ARow, aCol] of
0: begin
StringGrid.Canvas.Brush.Color := clWhite;
Rect := StringGrid.CellRect(iCol, iRow);
StringGrid.Canvas.FillRect(Rect);
Inc(arrState[iRow, iCol]);
end;
1: begin
StringGrid.Canvas.Brush.Color := clRed;
Rect := StringGrid.CellRect(iCol, iRow);
StringGrid.Canvas.FillRect(Rect);
Inc(arrState[iRow, iCol]);
end;
2: begin
StringGrid.Canvas.Brush.Color := $008CFF;
Rect := StringGrid.CellRect(iCol, iRow);
StringGrid.Canvas.FillRect(Rect);
Inc(arrState[iRow, iCol]);
end;
3: begin
StringGrid.Canvas.Brush.Color := clGreen;
Rect := StringGrid.CellRect(iCol, iRow);
StringGrid.Canvas.FillRect(Rect);
arrState[iRow, iCol] := 0;
end;
end;
end;
end;
end;
end;
Спасибо вам большое! – Ragglepop