[C++Builder] TApLabel 만들기 (3) Run Time 과 Design Time 의 분리

볼랜드포럼에 올린글을 블로그에 재게시 합니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=137

이번에는 Package 제작법에 대해서 알아봅시다.
Third Party Component 들을 보면 각 버전마다 두 개의 bpk 를 제공하는 것을 알 수 있습니다.
이것들은 도대체 뭘까요? 그리고 두 개의 bpk 가 설치 순서가 있는 것을 알 수 있습니다.

왜 이런 방식을 택하는 것일까요.

C++Builder 는 두가지의 개발방식을 지원하고 있습니다. Design Time 과 Run Time 입니다.
Design Time 의 개발방식은 Form 위에 Component 를 올려놓고 Object Inspector 에서 직접
조작하면서 직관적으로 개발하는 방식입니다. Run Time 은 기존의 방식과 같이 직접 코드를
입력하는 방식입니다. Design Time 에서는 Property Editor, Component Editor 라는 도구들을
사용할 수 있습니다. 하지만 이러한 도구들은 프로그램이 실행 될 때, 즉, Run Time 에서는
필요가 없습니다. 따라서 Run Time 에서는 이 코드들이 포함되지 않도록 Design Time 용 코드를
분리할 필요가 있습니다.

즉, bpk 를 두개로 만듭니다.

(1) Run Time 용
컴포넌트의 본체가 되는 코드, 컴포넌트를 포함하는 프로그램은 Run Time 용 코드만 포함

(2) Design Time 용
 - (1) 을 컴파일한 결과물인 .bpi 를 requires 에 포함시킵니다.
 - Design Time 에 필요한 Component Editor , Property Editor, (1) 을 contains 에 포함

여기서 주의할점이 한가지 있습니다!
Design Time 용 package 는 Run Time 을 compile 한 결과물인 bpi 가 필요합니다. 따라서
Run Time 을 먼저 Compile 한 후 (Install 이 아닙니다!) 그 뒤에 Design Time 을 Compile, Install
해야 합니다.


다음 그림을 비교해서 보시고 Run Time , Design Time 용 package 에 필요한 것이 무엇인지
옵션이 어떻게 구성되어 있는지 생각해 보세요.


[RunTime 용 Package 구성]




[DesignTime 용 Package 구성]



옵션에 Designtime only, Runtime only, Designtime and runtime 세가지가 있는 것을 알 수 있습니다.
세번째 옵션인 Designtime and runtime 은 Designtime 과 Runtime 용 코드를 모두 포함하는
것입니다. 이렇게 하면 설치가 간편해지는 장점이 있지만 Designtime 용 코드가 클 경우
실행파일의 크기가 커집니다. 그러나 Designtime 에서 별도의 기능을 제공하지 않는다면 이 옵션을
선택하는 것도 좋습니다.

Designtime 은 Runtime 코드를 포함합니다.

ApAbout.cpp
ApLabelCPE.cpp
ApLabel_DSGN_bcb6.cpp
ApLabel_reg.cpp
ApLabelResource.res
ApLabelCursor.res
ApLabel_DSGN_bcb6.res

ApLabel.cpp


Apple Label Component 제작 강좌는 이것으로 마칩니다. 애초의 목적은 컴포넌트를 제작해
봄으로써 컴포넌트 설치시에 발생하는 문제점을 스스로 해결할 수 있도록 하는것이었습니다.
Builder 의 장점은 남이 만든 코드를 간단한 절차를 통해서 내 프로그램에 추가할 수 있다는
것입니다. 그러나 설치과정에서 발생하는 문제점이 적지 않은데다가 제작자가 예상하지 못한
버그가 있을 경우 스스로 해결해야 합니다. 이 강좌를 통해서 이러한 문제를 해결하는데 도움이
되었으면 좋겠습니다.

완성된 컴포넌트는 다음과 같습니다.


C++Builder6 를 이용하여 간단한 Label Component 를 만들어 봤습니다.

글자에 입체감을 주는 효과와 외곽선을 그려주는 기능이 있습니다.

기능이 많지는 않지만 컴포넌트를 C++Builder 로 만들면 어떻게 되는지 참고할 수 있는 자료정도는 될 것 같습니다.

설치할때는 ApLabel_bcb6.bpk 로 Compile 하시고 그 뒤에 ApLabel_DSGN_bcb6.bpk 로 Compile , Install 하세요.