Другие языки программирования и технологии

Вопрос по StringGrid Delphi

Имеется обыкновенная StringGrid таблица (имя SG). Нужно просто автоматически хоть чем- то её заполнить. Туплю, не могу понять, почему не работает.
Мой код примерно такой:

procedure TForm1.FormCreate(Sender: TObject);
var i,j: integer;
begin
with SG do
for i:=0 to colcount-1 do
for j:=0 to rowcount-1 do
cells[i,j]:= IntToStr(i+j); {ну даже просто вот такой суммой}
end;

Код компилируется без ошибок, таблица пустая. Причём, если в этой процедуре явно задать что- то вроде
sg.cells[1,1]:= '123123';
, то всё равно ячейка не заполняется :(

Получилось вручную заполнить какую- то [i,j] ячейку только при использовании обработчика нажатия кнопки на форме, но мне нужно, чтобы таблица заполнялась сама автоматически!
Подскажите, где я ошибся и как вообще реализовать автозаполнение таблицы StringGrid?
А чему у тебя равны RowCount и ColCount.
К примеру, я вот так заполняю StringGrid с именем random12x3, для которого заранее в Properties определены значения ColCount = 3 и RowCount = 12 :

procedure TMyForm.Generate12x3;
var
Z, N, Row, Col : Byte;
S : array [0..36] of Byte;
begin
S[0] := 36;
for N := 1 to 36 do
S[N] := N;

Randomize;
for Row := 0 to 11 do
for Col := 0 to 2 do
begin
Z := 1 + Random(S[0]);
random12x3.Cells[Col, Row] := IntToStr(S[Z]);
Dec(S[0]);
for N := Z to S[0] do
S[N] := S[N+1];
end;

end; // Generate12x3 - Генерируем случайное заполнение 12х3

При этом, разницы нет когда я вызову данную процедуру: то-ли в onCreate, то-ли в OnClick какой-нибудь кнопки!
Эрнар Караев
Эрнар Караев
84 583
Лучший ответ
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i,j: integer;
begin
with StringGrid1 do
for i:=0 to rowcount-1 do
for j:=0 to colcount-1 do
cells[i,j]:= IntToStr(i+j); {ну даже просто вот такой суммой}
end;

end.

Все работает
Игорь Попов
Игорь Попов
8 247
попробуй засунуть код не в FormCreate а в FormShow