Q&A

  • 동적으로 생성한 컴포넌트 소멸시키는 방법..
컴포넌트를 동적으로 생성한 후 소멸을 시킬려고 합니다.

폼에서 버튼1을 클릭하면

Panel에 TMemo가 생성되고

버튼 2를 클릭하면

TMemo가 없어집니다.



근데 버튼3을 눌러서

Assigned()를 확인해보면 소멸되지 않고 남아있어서

다시 버튼1을 눌러도 생성되지 않습니다.



한번 동적으로 생성한 컴포넌트를 소멸시킬때

Free 나 Destroy 둘 해보았지만 되지않는데...

답변 부탁합니다.



unit TestEMemo;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls;





type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Panel1: TPanel;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

eMemo : TMemo;

end;



var

Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.Button1Click(Sender: TObject);

begin

if not Assigned(eMemo) then

begin

eMemo := TMemo.Create(self);

eMemo.Parent := Panel1;

eMemo.Align := alClient;

end;

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

if Assigned(eMemo) then

begin

eMemo.Free;

end;

end;



procedure TForm1.Button3Click(Sender: TObject);

begin

if Assigned(eMemo) then

ShowMessage('Assigned!!')

else

ShowMessage('Not Assigned!!');

end;



end.

1  COMMENTS
  • Profile
    최용일 2001.02.24 01:24
    안녕하세요. 최용일입니다.



    객체를 Free한다해도 참조변수에는 nil이 할당되지 않습니다. 이전에 생성되었던 객체의



    번지를 그대로 가지고 있죠. Free하고난 후에 nil을 직접 할당해주시거나



    FreeAndNil함수를 이용하세요...



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    if Assigned(eMemo) then

    begin

    eMemo.Free;

    eMemo := nil;

    // 이 두가지 동작을 동시에 하려면

    // FreeAndNil(eMemo);

    end;

    end;



    ^^ 항상 즐코하세요...



    델초보 wrote:

    > 컴포넌트를 동적으로 생성한 후 소멸을 시킬려고 합니다.

    > 폼에서 버튼1을 클릭하면

    > Panel에 TMemo가 생성되고

    > 버튼 2를 클릭하면

    > TMemo가 없어집니다.

    >

    > 근데 버튼3을 눌러서

    > Assigned()를 확인해보면 소멸되지 않고 남아있어서

    > 다시 버튼1을 눌러도 생성되지 않습니다.

    >

    > 한번 동적으로 생성한 컴포넌트를 소멸시킬때

    > Free 나 Destroy 둘 해보았지만 되지않는데...

    > 답변 부탁합니다.

    >

    > unit TestEMemo;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls, ExtCtrls;

    >

    >

    > type

    > TForm1 = class(TForm)

    > Button1: TButton;

    > Button2: TButton;

    > Button3: TButton;

    > Panel1: TPanel;

    > procedure Button1Click(Sender: TObject);

    > procedure Button2Click(Sender: TObject);

    > procedure Button3Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > eMemo : TMemo;

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > if not Assigned(eMemo) then

    > begin

    > eMemo := TMemo.Create(self);

    > eMemo.Parent := Panel1;

    > eMemo.Align := alClient;

    > end;

    > end;

    >

    > procedure TForm1.Button2Click(Sender: TObject);

    > begin

    > if Assigned(eMemo) then

    > begin

    > eMemo.Free;

    > end;

    > end;

    >

    > procedure TForm1.Button3Click(Sender: TObject);

    > begin

    > if Assigned(eMemo) then

    > ShowMessage('Assigned!!')

    > else

    > ShowMessage('Not Assigned!!');

    > end;

    >

    > end.

    • 델초보
    • 2001.02.24 01:13
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.02.24 01:24
      안녕하세요. 최용일입니다. 객체를 Free한다해도 참조변수에는 nil이 할당되지 않습니다. 이전에 생성되...
    • 최용일
      2001.02.24 01:05
      안녕하세요. 최용일입니다. M의 데이타형에 따라서 다라지겠죠... 만일 M이 PChar형이라면 M := '나...
    • 델초
      2001.02.24 01:57
      unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,...
    • 최용일
      2001.02.24 02:19
      안녕하세요. 최용일입니다. GlobalAlloc함수가 리턴하는것은 힙에 할당된 메모리포인터(메모리 핸들)입...
    • 델초
      2001.02.24 02:31
      우선 감사하다는 말부터 드리구여.. 용일님 같은 분덜 땜시 저 같은 초보가 잼나게 공부를 할수 있네여.. ...
    • 델초
      2001.02.24 01:45
      우선 답변에 감사하구여... m의 형은 global형입니다.... 이 글로발형에다 얼케 넣어야 할지 머르겠네여....
    • 최용일
      2001.02.24 01:50
      무슨 말씀이신지???? global이라는 데이터타입이 있나요??? 첨들어보는건데요.. 사용자 정의 데이터 ...
    • zerodog
    • 2001.02.24 00:50
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 아폴론
      2001.02.24 01:25
      zerodog wrote: > FormP23 이라는 퀵레포트를 만들고여... 퀵레포트를 더블클릭했을때 환경을 설정하는 >...
    • 손님
      2001.02.25 12:04
      퀵리포트 내의 테이블이나 쿼리의 active 가 true 인지... 확인 해보세요. 아폴론 wrote: > zerod...
    • Click
      2001.02.24 00:53
      델걸음마 wrote: > 안녕하세요. > 항상 코딩하다가 막히면 찾는 곳이 되었네요. ^^;; > 고수님들의 답...
    • 델걸음마
      2001.02.24 01:21
      님 감사합니다. 고수되서 답변 달 수 있는 그날을 위하여.... ^^
    • 쭈야
    • 2001.02.24 00:41
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 손용석
      2001.02.24 00:54
      부족하나마 몇자 적어 보겠습니다...!! #^.^# 요즘은 질문이 너무 간단해서 뭘 질문하는지 이해하기가 ...
    • 쭈야
      2001.02.24 00:59
      디비는 오라클사용하고 있구여 당그니 스토어프로시저 생성시 sql에서 테스트하여 프로시저를 생성 했답니...
    • 손용석
      2001.02.24 01:10
      허걱 넘 지송지송~~! 제가 넘 게을러서 키보드치기가 싫어서 그만~~ ㅡㅡ; 스프 : Stored Procedure ...
    • 최용일
      2001.02.24 01:01
    • 초보중짱
      2001.02.24 01:51
    • 최용일
      2001.02.24 01:58
    • 초보중짱
      2001.02.24 03:20
    • 최용일
      2001.02.24 04:34
    • 초보중짱
      2001.02.24 06:17
    • 최용일
      2001.02.24 08:08
    • 삼식이
    • 2001.02.24 00:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.02.24 00:42
      안녕하세요. 최용일입니다. MDI메인폼은 Application의 메인폼만이 될수 있습니다. 보니까 로그인화면을...
    • 손용석
      2001.02.24 00:15
      부족하나마 ... 몇자 *^.^* 제가 델4는 안써봐서... ㅡㅡ; dpl은 델3고 델5는 BPL이지용 ... ^^ 메...
    • 왕초보
      2001.02.23 23:11
      초짜의 델파이 wrote: > 델파이를 공부하고 있는 사람입니다. > 제가 Round()라는 함수에 대해서 알고 싶...
    • 초짜의 델파이
      2001.02.23 23:55
      왕초보 wrote: > 초짜의 델파이 wrote: > > 델파이를 공부하고 있는 사람입니다. > > 제가 Round()라는 ...
    • 정준길
    • 2001.02.23 22:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 손용석
      2001.02.24 00:00
      비가 오네여~~ %^.^% 부족하나마 몇자 적어보겠습니다...^^ 디렉토리 공유는 검색해보시면 많은 자...
    • 정준길
      2001.02.24 00:42
      정말 고맙습니다 아주 많은 도움이 되었습니다 감사합니다 손용석 wrote: > 비가 오네여~~ %^.^% > ...
    • 아폴론
      2001.02.23 23:05
      김재규 wrote: > 안녕하셔요.. > 심각한 문제가 발생해서 문의 드립니다. 이전에 이런 질문이 있었는데...
    • 초보
    • 2001.02.23 21:16
    • 0 COMMENTS
    • /
    • 0 LIKES
    • yytr
      2001.02.24 00:08
      장민우 wrote: > DELPHI INSTALL 할 때 초기화면 같은 경우 일반 윈도우 폼이 아니고 쪼금 특별한 경우 ...
    • 아직도 못 구했다면..
      2001.04.10 17:52
      급해여! wrote: > 나와있는 글들을 보고 김영대님 자료실에서 받아서 설치했는데 > 안되네요... > Dmitr...