当我试图加载图像时,我遇到了访问冲突。当我试图从文件加载时,错误发生了。有什么方法可以解决这个问题吗?
下面是代码:
Public
img: array of TImage;
...
SetLength(img, 50);
for I := 0 to 50 - 1 do
begin
img[I] := TImage.Create(panels[I]);
img[I].parent := panels[I];
img[I].Width := 80;
img[I].Height := 80;
img[I].left := 0;
img[I].top := 0;
img[I].Stretch := true;
img[I].Free;
img[I].Picture.LoadFromFile('./img1.bmp');
end;
我想创建不同的图片,我从一个网址获得多个图像。但我需要得到一个图像首先工作。
1条答案
按热度按时间pgvzfuti1#
您正在构造图像对象并将其添加到列表中,但随后您调用了
img[I].Free
,这会破坏该图像对象。当您在下一行尝试加载它时,您将使用无效的对象,这就是您的应用程序崩溃的原因。把那条线拿掉。
您正在构造具有所有者control-panel的
TImage
控件-该面板作为其所有者将在面板本身被销毁时自动清除这些图像控件,因此您不必担心内存泄漏。然而,如果出于某种原因,你想清除和删除你存储在数组中的图像,你将不得不循环通过数组,然后调用
img[I].Free
.当然,在你这样做之后,你不应该访问那些图像.通常在这种情况下,你应该设置图像引用到nil
.要通知其他代码数组中没有有效的图像,另一种方法是将数组长度设置为0。或