Q&A

  • 동적이미지 생성후 Free 하는방법......
동적으로 이미지를 생성후 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일째 씨름 하고 있습니다...
부탁좀 드릴께요...

그럼 즐코하세요
4  COMMENTS
  • Profile
    고지범 2002.09.23 21:11
    음.. 코드와 설명으로 보아하건 데... 그렇게 동작하는 것이 맞는 거 같군요...
    가령...
    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를 호출할 때 자동으로
    리스트 안의 객체들을 해제시킵니다.

    그럼 오늘도 즐입다.

  • Profile
    돌쇠 2002.09.23 23:42
    먼저 답변 감사합니다..
    그런데 잘 안돼서 다시 글 올립니다.
    var
    Myimage : Timage;
    kkk : TObjectList;
    i : integer;


    procedure TForm1.Button1Click(Sender: TObject);
    begin
    i := i + 1 ;
    Myimage  := Timage.create(form1) ;
    Myimage.parent := form1;
    Myimage.canvas.moveto(0,0);
    myimage.Top := 100*i;
    Myimage.canvas.lineto(100,100);
    kkk := TObjectList.Create(True);
    kkk.OwnsObjects := true;
    kkk.Add(Myimage);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    kkk.free;
    end;

    이렇게 하니 마찬가지로 마지막꺼만 지워지고 나머지는 그대로 남아 있네요..
    제가 잘못 설정한건가요..
    다시 한번 부탁드립니다..
    그럼 즐코하세요

  • Profile
    한원희 2002.09.24 00:59
    안녕하세요. 한원희입니다.

    문제는 버튼을 누를때 마다, 새로운 ObjectList 객체를 생성하고, 그곳에다가
    새로 만든 이미지를 넣으니까, 각 이미지 마다 목록 객체가 생기면서, 목록에는
    새로 생긴 단 하나의 이미지만 들어가게 코딩이 되어 있어서 그럽니다.
    kkk라는 변수를 멤버 변수(또는 전역 변수)로 선언하시고,

    private
      FImageList:TObjectList;
      // ...

    폼의 생성자에서 FImageList를 생성해 주고요.

      FImageList:=TObjectList.Create(True);
      FImageList.OwnsObjects:=true;

    폼의 파괴자에서 FImageList를 해제해 줍니다.

      FImageList.Free;

    이런식으로 해주고,
    이미지를 생성하는 부분에서는 따로 ObjectList 객체를 생성하지 말고,
    생성한 이미지만 추가하도록 하면 됩니다.

    그럼, 즐거운 하루 되세여~

  • Profile
    돌쇠 2002.09.24 19:57
    • ^________^
      2002.09.24 01:46
      델파이 설치된 곳에 보시면 소트에 관한 예제가 있습니다.. C:Program FilesBorlandDelphi6DemosThread...
    • 스말(^___^)
      2002.09.24 02:03
      우선 답변 감사드립니다.. QuickSortArray: TSortArray;를 사용해야된다는 뜻인지요 제가 하고싶은건&n...
    • 최용일
      2002.09.24 02:19
      안녕하세요. 최용일입니다. 방법은 수없이 많습니다. 텍스트파일이라면 그냥 간단히 TStringList로도...
    • 이영근
    • 2002.09.24 01:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 전형식
      2002.09.24 02:30
      체크박스가 깜빡이는것은 글쎄요... 직접만드셔야 할듯.. 하지만 트레이 아이콘이 깜빡이게(에니메이션)하...
    • 이주행
    • 2002.09.23 23:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신강섭
      2002.09.24 01:07
      될지 안될지는 모르겠는데요 이렇게 함 해보세요 form의 keypreview를 true 로 설정하고 formkeypress에...
    • 이주행
      2002.09.26 00:20
      감사 합니다.. 아래 에서 힌트을 얻어서, 다음고 같이 처리 했습니다.. // Tab인경우 처리.. if key =...
    • 최용일
      2002.09.24 02:24
      안녕하세요. 최용일입니다. 변수에 생성된 객체를 대입하는 부분이 없는거 같네요...   &n...
    • 이남호
      2002.09.24 19:56
      냉무 ^^
    • 김민우
    • 2002.09.23 21:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.09.23 22:01
      아쉽게도 없네요... 혹 보험관련일을 하시나요? 차량번호체크하는거 정말 짱나죠...^^ 그냥 지역을 따...
    • 최석기
      2002.09.23 21:04
      스먈님이 하시려는게 꼭 로그 파일 남기는 방법 같으네요. 가장 최신꺼를 파일의 제일 첫행에 남기시려...
    • 스말(^___^)
      2002.09.23 21:48
      StrList.Insert(0, Buffer); 를 사용했는데 기존에 적혀있던걸 지우고 새로운 데이터를 쓰던데요 결국엔...
    • 최석기
      2002.09.23 22:06
      훔.. 제가 테스트 해본 결과로는 젤 첫줄에 잘 써지는데요.. 님 코딩을 올려보시죠.. 어디가 잘못된...
    • 스말(^___^)
      2002.09.24 01:23
    • 최용일
      2002.09.24 02:58
      안녕하세요. 최용일입니다. COM, PRN모두 파일처럼 억세스 할 수 있습니다. 아래와 같이 해보세요... ...
    • 전형식
      2002.09.24 02:49
      저는 Comport 컴포넌트를 이용해 처리 했던 기억이 있습니다. 자료실에 가시면 comport제어 컴포넌트가 있...
    • 돌쇠
    • 2002.09.23 20:06
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 고지범
      2002.09.23 21:11
      음.. 코드와 설명으로 보아하건 데... 그렇게 동작하는 것이 맞는 거 같군요... 가령... 1) Myimage&nbs...
    • 돌쇠
      2002.09.23 23:42
      먼저 답변 감사합니다.. 그런데 잘 안돼서 다시 글 올립니다. var Myimage : Timage; kkk : TObjectLis...
    • 한원희
      2002.09.24 00:59
      안녕하세요. 한원희입니다. 문제는 버튼을 누를때 마다, 새로운 ObjectList 객체를 생성하고, 그곳에다...
    • 돌쇠
      2002.09.24 19:57
    • 황철원
    • 2002.09.23 19:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.09.24 20:00
      참조하세요 unit CallDll2; interface uses   Windows, Messages, SysUtils, Classes,...
    • 홍성락
      2002.09.23 20:15
      hsr/////////////////////////////////////////////////////// 이미 파일이 열려있어서 그런게 아닌지요? ...
    • 이추형
      2002.09.23 20:13
      열린상태로 붙잡고 있어서 열수 없는것입니다. 파일acess free를 선행해 주셔야 합니다.
    • 김상두
    • 2002.09.23 19:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.09.23 19:46
      해당쿼리에서 작업후 ApplyUpdates를 해주시고요 아래 루틴을 돌리면 되지 않을까 합니다..... procedu...
    • 김헌대
    • 2002.09.22 01:32
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상기
      2002.09.22 10:27
      '을 표현하시고자 하신다면 ''해줍니다 '을 2개 해주면 '자체가 표현됩니다.
    • goodlsw
    • 2002.09.21 14:49
    • 3 COMMENTS
    • /
    • 0 LIKES
    • goodlsw
      2002.09.23 21:55
      column명을 바꾸니까 되네요. sql에서 day나 date는 들어갈 수 없는 단어인가요? insert into expens...
    • 최용일
      2002.09.24 02:32
      안녕하세요. 최용일입니다. 흠~ 델파이에서 변수명이나 함수명으로 if, else, begin, for 등의 예약어를...
    • 폭가
      2002.09.23 21:00
    • 김희곤
    • 2002.09.21 06:21
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.10.09 20:00
      그것이 별거 아닌 프로그램입니다. 통신회사와 SMS발송에 관한 협약을 하면 FTP를 하나 열어줍니다, 그곳...
    • 김헌대
      2002.09.22 01:25
      저한테 모발폰으로 문자메시지 보내는 프로그램이 있는데 책을 사니까 책안에 있데여.. 근데 webbroker.dc...
    • 김종균
    • 2002.09.20 09:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 전형식
      2002.09.24 02:47
      MDI 에서도 스플래쉬 폼은 잘됩니다. 제가 보기엔 님께서 스플래쉬 실행방법에 조금 착오가 있는듯 싶습니...
    • 김헌대
    • 2002.09.20 04:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.10.08 03:09
      oci.dll(오라클8의 경우)을 이용하여 호출이 가능합니다. 하지만 좀 어렵네요... 어디선가 콤포넌트를 이...
    • freelab
    • 2002.09.20 02:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.09.23 20:05
      안녕하세요. 최용일입니다. 화면을 갱신하는 것은 우선순위가 가장 낮아서 빠른 순차적처리를 할때 잘 ...