Q&A

  • 동적 컴포넌트의 해제하는 어떻게 해ㅑ야하나요..
var
Img : TImage;
begin
Img := TImage.Create(self);

이렇게 컴포넌트를 만들어서 씁니다..

근데 호출할때 만들어지기만하지 초기화를 시키지 못해서 계속 TImage가 생겨서 메모리 누수가 생깁니다.

저거 호출 할때 그전에 만들어진 컴포넌트를 초기화 시키는 방법은 없을까요??

간단하게 생각해보면
A,B두개를 둬서 B는 만들면서 언제나 리셋하고 A와 연결해서 A를 계속 갱신하거나 함되겠지만.. 어떻게 표현할지를 모르곘네요.

도움 부탁 드립니다..
4  COMMENTS
  • Profile
    신현웅 2003.07.29 01:18
    1. 함수내에서 생성하고 지우기...

    var
      Img : TImage;
    begin
    Img := TImage.Create(self);
    try
        img 어쩌고..
    finally
        img.free;
    end;
    end;

    2. 전역으로 생성하고 지우기

    begin
      if img <> nil then img.free;
      Img := TImage.Create(self);
      Img어쩌고...
    end;

       참고> 전역으로 잡았으면... 폼이 죽을때... img역시 img.free로 해제


  • Profile
    아리엘 2003.07.29 01:42
    답변 감사 드립니다..

    하지만 생성한뒤에 바로 지워 버리면 해당 컴포넌트의 결과를 볼수가 없어서
    다시 해당 함수를 실행할때 그전에 만든 컴포넌트를 지우고 싶은데..

    그렇게 하려면 어떻게 해야할런지요..

    알려주신방법을 하면 실행과 동시에 소멸해버리니 쓸수가 없을거 같습니다 ㅠ ㅠ

  • Profile
    신현웅 2003.07.29 01:54
    다음 소스를 참고하세요~~ 주석처리된 부분만 보시면 될겁니다
    ----------------------------------------------------------

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;

    type
      TForm1 = class(TForm)
        Image1: TImage;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        FImg : TImage;                                       // <== 전역으로 설정
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if FImg <> nil then FImg.Free;              // <== 이미 생성되었으면 해제

      FImg := TImage.Create(nil);                 // <== 생성

      FImg.Picture.LoadFromFile('test.bmp');

      Image1.Picture := FImg.Picture;
    end;

    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      if FImg <> nil then FImg.Free;             // <== 폼이 종료될때 이미지를 해제
    end;

    end.
  • Profile
    아리엘 2003.07.29 20:36
    감사합니다~~

    덕분에 머리 속이 뚤리는듯 합니다 꾸벅 ^^

    좋은 하루 되세요