【发布时间】:2017-01-04 13:57:52
【问题描述】:
我面临的问题如下。请注意我不是delphi pascal的专业人士
为了节省大量内存和时间,我创建了一个过程:
procedure TForm1.Placeholder(tspath: STRING);
begin //rgbholder :TImage globally declared (Dinamicly create image)
rgbholder.Free;//Free previous image
rgbholder := timage.Create(self);
rgbholder.Width := 10;
rgbholder.Height := 10;
rgbholder.Visible := false;
rgbholder.Bitmap.LoadFromFile(TSpath);
end;
procedure TForm1.Image3Click(Sender: TObject);
begin
placeholder('Data\Grass\Grassanim1low.png');
bitmaplistanimation5.Stop;
bitmaplistanimation5.Loop := true;
//bitmaplistanimation5.AnimationBitmap.LoadFromFile('Data\Grass\Grassanim1low.png');
bitmaplistanimation5.AnimationBitmap.Assign( rgbholder.Bitmap);
bitmaplistanimation5.AnimationCount := 22;
bitmaplistanimation5.AnimationRowCount := 2;
bitmaplistanimation5.Duration := 2.5;
bitmaplistanimation5.PropertyName :='bitmap';
end;
现在我的问题是释放 bitmaplistanimation5.AnimationBitmap.Assign(rgbholder.Bitmap); 的内存
当这段代码执行时
bitmaplistanimation5.Stop;
bitmaplistanimation5.Enabled := false;
bitmaplistanimation5.AnimationBitmap.Free;
一切都很顺利,直到我用close; 关闭可执行文件,或者简单地用窗口中的出口关闭它。
关闭后它会在模块 Project1.exe 中的 00007A55 处引发应用程序错误异常 EInvalidPointer。无效的指针操作
我不认为我正在尝试释放已经释放的内存,我也没有尝试释放分配给内存管理器以外的其他地方的内存,除非占位符过程很重要。除非我遗漏了什么或不理解我应该理解的东西。
【问题讨论】:
-
注意程序占位符与需要相同文件的多个动画一起使用,因此 3 个“草动画”使用相同的内存,节省大约 30 到 50 mb ram
标签: delphi firemonkey delphi-xe7