동적으로 이미지를 생성후 Free 해주고 싶은데.. 잘 안돼네요...
제가 한 소스입니다..
전역변수 선언
Myimage : TImage;
procedure TForm1.Button1Click(Sender: TObject);
begin
Myimage := Timage.create(form1) ;
Myimage.parent := form1;
Myimage.cavnas.moveto(0,0);
Myimage.canvas.lineto(100,100);
end;
이렇게 여러개의 image 를 동적으로 20 ~ 100 정도 생성합니다.
이때 Myimage.free;
해주닌깐 마지막 한개만 지워지네요...
전 동적으로 생성된 모든것을 지우고 싶거든요...
별 방법을 다 사용해보았는데 안돼네요...
이것 가지고 5일째 씨름 하고 있습니다...
부탁좀 드릴께요...
그럼 즐코하세요
가령...
1)
Myimage := Timage.create(form1) ;
Myimage.parent := form1;
Myimage.cavnas.moveto(0,0);
Myimage.canvas.lineto(100,100);
2)
Myimage := Timage.create(form1) ;
Myimage.parent := form1;
Myimage.cavnas.moveto(0,0);
Myimage.canvas.lineto(100,100);
3)
Myimage := Timage.create(form1) ;
Myimage.parent := form1;
Myimage.cavnas.moveto(0,0);
Myimage.canvas.lineto(100,100);
4)
MyImage.Free;
이렇게 4개를 동시에 실행 시킨다면, 어케 될가요?
1),2),3)에서 TImage에 해당하는 메모리 덩어리가 3개가 생기는 데, 그 메모리들을
가리키는 값들, 포인터 겠죠? 그건 어디에 있나요? 마지막 거 이외에는 없다가
정답입니다. 따라서 4) MyImage.Free를 실행시킬 때는 마지막 3)에서
만들어진 TImage만 메모리에서 없어지겠죠...
생성 및 해제가 매우 일반적이라면...즉, 중간에 있는 것들을 지우고 모...
그런 작업이 없이 한번에 생성했다가 한번에 삭제시킨다면...
TObjectList를 사용해보세요... TObjectList.OwnsObject 항목을 True로
해 놓으면, TObjectList.Clear 혹은 TObjectList.Free를 호출할 때 자동으로
리스트 안의 객체들을 해제시킵니다.
그럼 오늘도 즐입다.