Читать и манипулировать значениями в TStringGrid - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть StringGrid, который выглядит следующим образом:

+----------+----------+----------+----------+----------+
| FixedRow | FixedRow | FixedRow | FixedRow | FixedRow |
+----------+----------+----------+----------+----------+
| Data     | Data     | Data     | 100      | Data     |
+----------+----------+----------+----------+----------+
| Data     | Data     | Data     | 158      | Data     |
+----------+----------+----------+----------+----------+
| Data     | Data     | Data     | 1002     | Data     |
+----------+----------+----------+----------+----------+

StringGrid может иметь любое количество строк, и я хочу, чтобы в рамках события тика Timer найти значение каждой ячейки в столбце 4 и уменьшить его значение на 1.

Как я могу читать и управлять TStringGrid таким образом?

1 Ответ

4 голосов
/ 26 февраля 2020

Это очень просто.

Просто переберите строки данных (без заголовка), и для каждой строки получите значение в четвертом столбце, преобразуйте его в целое число, уменьшите его, преобразуйте его вернуться к строке и установить значение ячейки в этой строке.

Поскольку у вас нет фиксированного столбца, все столбцы являются столбцами данных. Они индексируются 0, 1, 2, 3, 4, четвертый, таким образом, имеет индекс 3.

Поскольку у вас есть фиксированная строка (заголовок), строки индексируются 0, 1, 2, ..., N - 1, со строками данных 1, 2, ..., N - 1.

procedure TForm1.Timer1Timer(Sender: TObject);
var
  y: Integer;
  Val: Integer;
begin
  for y := 1 to StringGrid1.RowCount - 1 do
  begin
    Val := StrToInt(StringGrid1.Cells[3, y]);
    Dec(Val);
    StringGrid1.Cells[3, y] := Val.ToString;
  end;
end;
...