Dein Code wird nur in der ersten Zelle (0,1) den Wert "31" anzeigen, sonst nichts. Das ist der letzte Wert deiner FOR Schlaufe, bei der du bei jedem Druchlauf die erste Zelle (0,1) überschreibst. Wie schon geschrieben, müsste es StringGrid.cells[0,i]:=IntToString(i) heissen.
Folgendes funktioniert wie es soll:
Delphi-Quellcode:
var
i: integer;
begin
StringGrid1.RowCount := 32; // 32 Zeilen, da du erst ab der 2. abfüllst. Die erste Zeile wäre 0.
for i := 1 to 31 do // ab der 2. Zeile werden die folgenden 31 Zeilen der ersten Spalte abgefüllt
begin
StringGrid1.cells[0,i]:=IntToStr(i);
end;
end;