var
i:integer;
aa: array of tgroupbox;
beginfor i:=0 to dm.adoquery.recordcount do
beginaa[i]:=tgroupbox.Create(self);
aa[i].Parent :=self;
aa[i].Caption :='病人信息';
aa[i].Left :=i*20;
end;
我想动态生成groupbox,以上是我的代码,运行时出现一些地址错误信息,请问大家原因是什么?

解决方案 »

  1.   

    没设置动态数组aa的长度。var
    i:integer;
    aa: array of tgroupbox;
    begin
    setlength(aa,dm.adoquery.recordcount);//////////////////////////for i:=0 to dm.adoquery.recordcount do
    beginaa[i]:=tgroupbox.Create(self);
    aa[i].Parent :=self;
    aa[i].Caption :='病人信息';
    aa[i].Left :=i*20;
    end;
      

  2.   

    var
    i:integer;
    aa: array of tgroupbox;
    beginfor i:=0 to dm.adoquery.recordcount-1 do  //我想错误应该是出在这里recordcount应该减1
    beginaa[i]:=tgroupbox.Create(self);
    aa[i].Parent :=self;
    aa[i].Caption :='病人信息';
    aa[i].Left :=i*20;
    end;
      

  3.   

    应该是上面二位结合起来的结果:
    对数据分配长度,同时注意不要越界:var
    i:integer;
    aa: array of tgroupbox;
    begin
    setlength(aa,dm.adoquery.recordcount);
    for i:=0 to dm.adoquery.recordcount-1 do 
    begin
      aa[i]:=tgroupbox.Create(self);
      aa[i].Parent :=self;
      aa[i].Caption :='病人信息';
      aa[i].Left :=i*20;
    end;