>>img:array of timage;for i:=0 to 10 do
  begin
        SetLength(Img,10);
        Img[i]:=TImage.create(self);
        Img[i].Parent:=self;
        Img[i].Width:=200;
        Img[i].Height:=80;
        Img[i].Left:=10;
        Img[i].Top:=80*i+5;
        Img[i].Picture.LoadFromFile('路径');
  end;
请问我怎样释放创建的这10个图像对象?

解决方案 »

  1.   

    创建的代码需要修改:
    SetLength(Img,10);  //这一句不应该放在循环体内
    for i:=0 to 10 do
    begin
      Img[i]:=TImage.create(self);
      Img[i].Parent:=self;
      Img[i].Width:=200;
      Img[i].Height:=80;
      Img[i].Left:=10;
      Img[i].Top:=80*i+5;
      Img[i].Picture.LoadFromFile('路径');
    end;释放:
    for i:=0 to 10 do Img[i].Free;
    SetLength(Img, 0);
      

  2.   

    SetLength(Img,10);  
    for i:=0 to 9 do
    begin
      Img[i]:=TImage.create(self);
      Img[i].Parent:=self;
      Img[i].Width:=200;
      Img[i].Height:=80;
      Img[i].Left:=10;
      Img[i].Top:=80*i+5;
      Img[i].Picture.LoadFromFile('路径');
    end;释放:
    for i:=0 to 10 9 Img[i].Free;
    SetLength(Img, 0);
      

  3.   

    SetLength(Img,10);  
    for i:=low(img) to high(img) do
    begin
      Img[i]:=TImage.create(self);
      Img[i].Parent:=self;
      Img[i].Width:=200;
      Img[i].Height:=80;
      Img[i].Left:=10;
      Img[i].Top:=80*i+5;
      Img[i].Picture.LoadFromFile('路径');
    end;释放:
    for i:=low(img) to high(img) do
      Img[i].Free;
    SetLength(Img, 0);
      

  4.   

    谢谢各位的帮助,用dragonki的方法解决了,给各位加分,
      

  5.   

    我是一个一个的创建,然后一齐释放。直接用setlength()好像不行。
      

  6.   

    用dragonki的方法解决?具体点
      

  7.   

    创建VCL组件时,如果指定一个有效的owner,可以不主动去释放,owner会负责。但是本着谁创建谁释放的原则,Create以后尽量保证Free
      

  8.   

    @4楼,dragonki
    我各人认为,这段释放代码有待商榷
     
    for   i:=low(img)   to   high(img)   do 
        Img[i].Free; 我认为应该改为这样:
    for i := high(Img) to low(Img) do
        Img[i].Free;
    测试代码:
    首先,
      for i := low(Img) to high(Img) do
      begin
        Img[i].Free;
        if Assigned(Img[i]) then ShowMessage('ok' + IntToStr(i));{将会显示对话框}
      end;
    然后:  for i := high(Img) to low(Img) do
      begin
        Img[i].Free;
        if Assigned(Img[i]) then ShowMessage('ok' + IntToStr(i));{将不会显示对话框}
      end;
      

  9.   

    debug:
    人认为
      

  10.   


    中午喝高了,会犯这种错误? 这段代码根本不会被执行
    for i := high(Img) to low(Img) do
      begin
        Img[i].Free;
        if Assigned(Img[i]) then ShowMessage('ok' + IntToStr(i));{将不会显示对话框}
      end;
      

  11.   

    其实我想说的是这个:  for i := low(Img) to  high(Img) do
      begin
    //    Img[i].Free;
        FreeAndNil(Img[i]);
         if Assigned(Img[i]) then ShowMessage('ok' + IntToStr(i));{将不会显示对话框}
      end;