var LyrPanel:Array of TPanel;
    I:integer;
begin
  Setlength(LyrPanel,20);
  For I:=0 to 20 do
    begin
      LyrPanel[I]:=TPanel.Create(ScrollBox1);
      With LyrPanel[I] do //在此处出错
        begin
          Align:=alTop;
          Color:=$00FC2C94;
          Height:=33;
          Caption:='';
          //Visible:=True;
        end;
     end;
end;LyrPanel不是的parent不是指定了为存在的ScrollBox1吗?

解决方案 »

  1.   

    两处错误var LyrPanel:Array of TPanel;
        I:integer;
    begin
      Setlength(LyrPanel,21);//**************注意这里需要申请21个lyrpanel空间
      For I:=0 to 20 do
        begin
          LyrPanel[I]:=TPanel.Create(ScrollBox1);
          lyrpanel[i].parent:=scrollbox1//**********注意这里需要指明在那个容器上创建
          With LyrPanel[I] do //在此处出错
            begin
              Align:=alTop;
              Color:=$00FC2C94;
              Height:=33;
              Caption:='';
            end;
         end;
    end;
    关于第一个问题的解释,你申请的数组空间必须比你要使用的空间大一,如你申请20个数组空间,使用为0..19可以,从5..20就不可以,因为,当你申请20个空间以后,前4个内存空间没有使用,从第5个内存空间开始使用,而不是象你想的那种从第一个那里开始存放5到20,至于为什么要比使用的大一,是因为要留一个数组空间存放数组大小。你出错就出在这里,parent没有指定不会引发异常。关于第2个问题的解释:parent与创建时传递的参数是不一样的,LyrPanel[I]:=TPanel.Create(ScrollBox1);表示你创建的lyrpanel在谁释放后才释放,在这里就是当
    ScrollBox1释放后,lyrpanel释放,而parent表示要在那个容器上创建,这和create里的参数是两个概念。
    看在你的名字比较想MM而且又没人和我抢的份上,说了这么多,已经很详细了,在我机器上调试通过后来的兄弟不用补充了,分都给我吧,我正冲5条内裤呢