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
[6792] Re:new명령어에 대해서... -> 컴퍼넌트의 동적 생성 (기초)
박지훈.임프 [cbuilder] 2749 읽음    2001-04-13 11:03
임펠리테리입니다.

질문내용이 명확하지 않아서 엉뚱한 다리를 긁었군요. (무안~)
말씀하신 내용은, 컴퍼넌트를 동적으로 생성하는 데에서 new를 어떻게 사용하느냐.. 그런 말씀이신 것 같군요. 일반적인 C++에서의 new의 용도는 아신다고 하셨으니 그것이 빌더에서 응용되는지를 알려드리죠.

컴퍼넌트를 생성할 때 new를 쓰는 것은, 일반적인 C++에서 new를 이용하여 메모리를 할당하는 것과 같은 맥락입니다.
단순히 일반적인 타입일 경우(primitive type; int, char 등등) new를 이용하여 메모리를 할당하면 메모리할당 그 자체로서 작업이 끝나지만, 메모리를 할당하는 타입이 클래스일 경우 메모리 할당시에 그 클래스의 생성자가 실행됩니다.
그래서 클래스의 객체가 생성될 때는 일반적인 기본 타입의 객체가 생성될 때와는 달리 프로그램적인 처리를 해줄 수 있는 거구요.

모든 VCL 컴퍼넌트 클래스에는 생성자가 있으므로 메모리를 할당해주기만 하면 컴퍼넌트로 동작할 수 있습니다. 단, TControl에서 상속받는(화면에 보이는) 클래스들의 경우에는 생성 직후에 Parent를 정해주어야 화면에 나타납니다.

모든 VCL 컴퍼넌트의 생성자에는 단 하나의 인자를 넘겨야 하는데, Owner라고 합니다. 이 인자는 생성할 컴퍼넌트의 "소유자"인 컴퍼넌트를 지정해주는 것인데, 여기서 소유자란, 소유자 자신이 파괴(delete)될 때 현재 생성할 컴퍼넌트를 자동으로 함께 파괴해주기 위한 것입니다. 다시 말해, 생성시에 소유자를 정해주면 나중에 자동으로 파괴됩니다.

만약 Owner를 정해주지 않고 NULL을 넘겨주어도 됩니다만 이 경우에는 반드시 프로그래밍으로 명시적으로 삭제해주어야 합니다.

이론적인 기초는 이정도이구요.
간단히 패널을 동적으로 생성하는 코드를 예를 들어보죠.

void __fastcall TForm1::Button1Click(void *Sender)
{
  TPanel *MyPanel = new TPanel(this);
  MyPanel->Parent = this;
}

이정도면 충분합니다. this는 아시지요? TForm1의 멤버함수에서 쓰였으므로 여기서 this는 폼 객체 자체입니다.
처음에 생성자의 인자로 넘겨준 this는 Owner를 뜻하구요. 두번째로 쓴 this는 Parent입니다. 이것은 폼 위에 패널이 나타날 바탕을 지정하는 것입니다.
만약 가로 세로 크기나 X, Y 위치, 그리고 그 외 각종 속성을 지정해주시려면 생성 후에 지정해주는 코드를 추가해주면 됩니다.

그외에는.. 이 게시판에서 "동적"이라는 키워드로 검색을 해보시면 컴퍼넌트 동적생성에 대한 많은 질문 답변이 나오니 참고가 되실 겁니다.

그럼 참고하시길...


궁금이 님이 쓰신 글 :
: 우선 답변 감사드립니다..
:
: 귀하께서 말씀하신 내용은 이미 잘 알고 있습니다..
:
: 제가 알고 싶은건 빌더에서 말이죠.. 또 다른 쓰임이 동적으로...
: 예를든다면 버튼이라든지 다른 무엇을 정의 해줄적에도 쓰이구 있는데 이에대한 예와 함께 COMMENT부탁드립니다..
:
: 한가지 더요..!!
: 음.. NEW명령어를 쓰기전에 포인터 변수를 정의 해주는데 실제 핸들에서 말구 헤더파일에서 정의 해주면 안되나요.. 글구..왜 쓰나요,,?(처리 속도 이외에..)
:
: 그럼 답변 기다리겠습니다..
:
: 좋은 하루 되십시요..  감기 조심하시구요...
:

+ -

관련 글 리스트
6776 new 명령어에 대해서.. 궁금이 2310 2001/04/12
6781     Re:new 명령어에 대해서.. 박지훈.임프 2411 2001/04/12
6789         new명령어에 대해서... 궁금이 2384 2001/04/13
6792             Re:new명령어에 대해서... -> 컴퍼넌트의 동적 생성 (기초) 박지훈.임프 2749 2001/04/13
6795                 Re:Re:new명령어에 대해서... -> 컴퍼넌트의 동적 생성 (기초) 궁금이 2398 2001/04/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.