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

C++빌더 Q&A
C++Builder Programming Q&A
[46560] Re:질문]초보입니다. 풀이좀부탁..ㅜㅜ
장성호 [nasilso] 866 읽음    2006-09-18 12:28
Builder의 라이브러리 VCL을 좀 뜯어보면 쉽게 알수있습니다.

BCB의 컨트롤들은 대부분 TComponent * 클래스를 상속받아  상속받아 만들어집니다.
아래의 구조로...

TObject 
   ||
TPersistent
   ||
TComponent
   ||
TControl
   ||
  ****

그렇다면
1. Components[jyt]뭐냐?
TComponent * 클래스에 Components라는 프로퍼티가 있습니다.
만약 TForm이라면 TComponent를 상속받았으니 Components속성이있겠죠?
Form위에 Button이 하나 올려지면 ( 자동생성 , 또는 new할때 owner로 Form을 줘야함)
Form의 Components에 Button이 추가됩니다.

pas코드를 보면 TList로 만들어져있지만
배열처럼 접근할수 있도록 되어있습니다.

Form위에 control이 10개 있다면
Form->ComponentCount는 10 이 나오게 됩니다.

2. Components[jyt]->ClassNameIs("TEdit")는  String 으로 jyt번째 배열에 있는 Component가 TEdit인지 확인하는
   bool형을 반환하는 함수입니다.

3. dynamic_cast는 그냥 cast하는 것입니다.
   Components배열에는 TComponent형으로 들어있으므로..
 
   만약에 TEdit*가 들어있다면 TEdit *형으로 형변환해야 사용할수 있겠죠?
   그냥   int tag=((TEdit *)Components[jyt])->Tag; 이렇게 해도 됩니다.
   단지 dynamic_cast는 .... cast를 좀더 안전하게 하기위해 하는걸로 알고있습니다.
   http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=391
   참조하세요


추가 1.
new를 통해 heap에 메모리를 잡으면
반드시 free나 delete를 통해 메모리를 해제 해주어야 하는것은 알고 계시죠?
VCL의 TComponent는  이걸 매우 쉽게하도록  만들어져 있습니다.

어떤 컴포넌트를 새로 생성할때 주인(Owner)를 정해주면
그 주인이 죽을때(delete될때 ) 밑에 하인들은 모조리 같이 delete하도록 만들어져 있습니다.

다시말해 어떤 주인 컴포넌트(Owner)만 죽이면 ..
하인 컴포넌트가 수백이든 수천이든  모두다 같이 죽는다(메모리에서 해제)는 것입니다.

예를들어 우리가 Form위에 수십개의 Control이 올려져있더라도
Form만 delete하면 그위해 올려져있던 모든 control이 자동으로 delete된다는것입니다.


추가2
Form의 함수에서 아래 코드가 있었다면
기본적으로 Components는 this->Components 와 똑같으며
this가 Form1이면 Form1->Components 와 똑같습니다.
그리니까 아래코드는 Form위에 올려진 Component들중에서 TEdit를 찾고
TEdti의 Tag값을 가져오는 코드입니다.


이한진 님이 쓰신 글 :
: 이제막 빌더를 배우는 초짜입니다.
: 근데 아래 문장이 무슨내용인지 알수가 없네구요..ㅜㅜ
: 1. Components[jyt]->ClassNameIs("TEdit")
:
: 2. int tag=(dynamic_cast<TEdit *>(Components[jyt]))->Tag;
:
: 위 두 문장이 무엇에 쓰이는 명령인지 ..도통 감이 오지 않네요..
: 특히 "dynamic_cast" 요거는 더 모르겠구요..
:
: 암튼 넘..어려워.ㅜㅜ

+ -

관련 글 리스트
46551 질문]초보입니다. 풀이좀부탁..ㅜㅜ 이한진 811 2006/09/16
46560     Re:질문]초보입니다. 풀이좀부탁..ㅜㅜ 장성호 866 2006/09/18
46553     Re:질문]초보입니다. 풀이좀부탁..ㅜㅜ Batman 838 2006/09/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.