う〜ん、手続き内で動的配列の数を変更すると Ver 指定する必要があるようです。
Ver が無いと100〜109しか表示されません。
type
TTestAry = array of integer;
procedure ABC(var buf:TTestAry);
var
i,len,count:integer;
begin
len := Length(buf); // 今のサイズを得る
count := 0;
// 100〜200のデータをbufにセットする処理
for i := 100 to 200 do begin
buf[count] := i;
inc(count);
// 配列の数を増やす ---------
if count >= len then begin
len := len + 10; // とりあえず10増やす
SetLength(buf,len);
end;
// --------------------------
end;
// 終了前に配列の数を実際の数に揃える
SetLength(buf,count);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Abuf:TTestAry;
i,len:integer;
begin
// 動的配列設定
SetLength(Abuf,10); // とりあえず10確保
// 手続きを呼び出す
ABC(Abuf);
// 結果の表示
len := Length(Abuf);
for i := 0 to len - 1 do begin
ListBox1.Items.Append(inttostr(Abuf[i]));
end;
end;
ListBox1.Items.Append()のように使えたらと思ったのですが、
どうもちがうようです。
やはり呼び出し側でSetLength(Abuf,10000)とかにし、ABCを関数にして
実際に処理した数を返すようにするのが正解かもしれません。
|