Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[3039] [답변] CKS7108/ [델파이] create 메소드에 대해서...
pcni [ ] 2194 읽음    1998-05-30 19:27


유수닙니다. 제가 아는 데 까지 답변할께요. ^^;

더 잘 아시는 분 보충 답변 부탁드립니다.

1. Graph 와 mypen 의 어떤 차이점?

TGraphicControl은 입력포커스가 가지 않는 TLabel,TShape 같은 클래스의

선조클래스입니다.

질문에서 Create 를 하지 않은 이유는 간단합니다. 배열로 만들어

클래스 대입을 하기 때문입니다. 계승된 클래스 중의 하나인 TShape를

선조 클래스인  TGraphicControl에 클래스를 대입하기 때문이죠.. 즉 이미

만들어진 TShape(이미 메모리에 할당되고 인스턴스가 생성되었겠죠!)를 TGraphContr

ol에 지정을주는겁니다.

이건 모든 클래스에서 다 적용됩니다. Create는 대입하지 않고, 자신이 직

접 클래스를 메모리에 생성할 때 사용해야 합니다. 메모리에 생성했으므로

나중에 꼭 free를 실행시켜 주어야 문제(?)가 안 생기겠죠.

예를 들면 var MyLabel : TLabel; 을 동적생성하여 화면에 나타내 주려면,

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyLabel := TLabel.Create(Self);
  MyLabel.Parent := Self;
  MyLabel.Caption := 'Zzzz';
end;

라구 하구,

프로그램이 끝나는 시점에서 MyLabel.Free; 해 주어야 합니다.

하지만, 화면에 있는 Label1을 제어 하기 위해선,

procedure TForm1.FormCreate(Sender: TObject);
  var MyLabel : TLabel;
begin
  MyLabel := Label1;
  MyLabel.Caption := 'Zzzz';
end;

라고 하는 겁니다. (생성 시킬 필요도, 해제 시킬 필요도 없죠)

컨트롤을 배열로 만드는 것 역시 클래스 할당만 해 주고, 그 때부터 마음대

로 배열의 행태로 다루면 되므로, Create 할 필요가 없죠.

물론 할당하는 클래스가 동적으로 생성되었던 거라면 원래의 클래스를 나중

에 Free시켜 주어야 하겠죠. 커커.. 저도 정확한 개념이 안 잡혀서 설명이

잘 안되는 것 같아 죄송합니다.

★ 정리해 보면 Create는 메모리에 직접 클래스를 생성할 때 쓰는 겁니다.

   CKS7108님이 질문하신 내용은 클래스를 메모리에 생성시키는냐, 아님

   생성된 것을 대입하여 사용하느냐 의 차이로 봐야 할 겁니다.

   TShape을  TGraphicControl에 대입시키는 것이 가능한 것은 선조클래스

   이기 때문이고, 그건 도움말을 보면 확인 할 수 있습니다.

   아, 그리구 TPen은 Non-Visual 컴포넌트이므로 반드시 Create시켜야

   하겠죠... 그리구 , 이 만들어진 TPen역시 다른 배열로 선언된  TPen

   에 대입해 사용가능합니다.

2. Create메소드에서 self 지시자는 어떤 영향을 주나요.. (델파이 도움말 참조)

Self 지시자는 그 컴포넌트의 Owner(소유자)를 뜻합니다. 컴포넌트들(TComponent에

서 계승된 클래스)은 모두 생성할 때 Owner를 지정해 줍니다. 한 컴포넌트가 다른 컴

포넌트에 의해 소유되었을때, 소유된 컴포넌트의 메모리는 Owner의 메모리가 free될

때, 같이 free가 됩니다. 델파이에선 기본적으로 한 폼은 그것 위에 있는 모든 컴포

넌트의 Owner가 됩니다. 따라서 폼이 free될때, 모든 컴포넌트의 메모리도 자동으로

free가되는 겁니다. 보통 Self로 하여 사용하게 되는데, 소유자를 폼으로 하여 생성시

키는겁니다.
                                                       흐르는 물..   유수

           보탬 : 이전에는 PCNI로 글을 올렸는데, 오늘부턴 유수로 올립니다.


+ -

관련 글 리스트
3039 [답변] CKS7108/ [델파이] create 메소드에 대해서... pcni 2194 1998/05/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.