Проблемы я столкнулся как follows.Please отметить, я не профессионал в Дельфах паскальсвободной памяти, используемая Exception Tbitmaplistanimation.animationbitmap поднятого EInvalid Указатель
Чтобы сохранить большой объем памяти и время я создал процедура:
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;
или просто закрыв его выходом в окне.
После закрытия он выдает исключение ошибки приложения EInvalidPointer в модуле Project1.exe в 00007A55. Недействительная операция указателя
Не думаю, что я пытаюсь освободить освобожденную память, я также не пытаюсь освободить память, которая была выделена где-то, кроме диспетчера памяти, если только процедура заполнителя не учитывается. Если я не пропущу что-то или не понимаю что-то, что я должен.
Примечание. Процедура Заполнитель используется с несколькими анимациями, для которых требуется один и тот же файл, поэтому 3 '' анимация травы '', которая использует ту же память, что она экономит от 30 до 50 мб. Ram –