블로그는 귀차니즘

First Sensation
  • 공지
  • 지역로그
  • 태그
  • 방명록

Codegear 2007 - 사용자 정의 컨트롤(?) 내 입맛대로 추가하기

Programming 2008/06/26 11:40 귀차니스트

  회사에서 Borland C++ 6.0 Enterprise 버젼으로 기존에 존재하던 프로그램을 수정해야 할 일이 생겼는데 어떻게 하다보니 기존에 없던 새로운 디자인의 컨트롤을 제작하여 사용해야 하는 것이었습니다. 그렇게 대단한 일도 아니고 고급 기능을 원하는 컨트롤도 아니라서 일단 제작을 하다보니 대충대충 해도 쉽게 되더군요. 그래서 정리해 보기로 했습니다.

1. Codegear Package 생성



  일단 VCL 컴포넌트를 만들기 위해서 Package를 생성해야 합니다. 그렇지 않고 따로 하는 것은 딱히 잘 모르겠네요. 일단 이 방법으로 하여 컴포넌트 설치까지는 무난하게 진행 되니 따라 하시면 될것 같습니다.

2. Package 프로젝트를 이름 지정하여 저장



  패키지를 선택하여 생성버튼을 누르면 해당 프로젝트에 대해서 VS.net 처럼 프로젝트의 이름을 바로 묻는 것이 아니기에 추가할 때는 임시로 이름을 붙이고, 저장할 때 해당 파일을 저장하게 되며, 그 파일 내부의 동일 클래스명은 자동으로 바꿔집니다. 일단 Codegear 에서는 추가하면 저장하는 기능을 먼저 생각하는 것이 좋더군요.

3. 컴포넌트 생성





  이제 컴포넌트를 생성해야 합니다. New -> Other 메뉴로 들어가시면 해당 창이 표시되며 해당 창에서 보나마나 설명할 것도 없이 Component 를 선택 후 OK 버튼을 살포시 눌러줍니다.

4. 기본 베이스 컴포넌트 선택하기





  컴포넌트를 제작하기 위해 기본 Base Class 로 사용할 컴포넌트를 선택하는 화면 입니다. 여기서 선택하는 클래스가 기본 클래스로 등록되며 이 클래스의 동작에 많은 영향을 받게 됩니다. 그래서 하나를 신중히 생각하고 비슷한 쪽으로 선택을 하면 되겠습니다. 전 일단 TGroupBox 를 선택해봤습니다.

5. 컴포넌트 이름 지정하기



  해당 컴포넌트를 생성했으므로 이 컴포넌트가 폼에 컨트롤을 배치할 때 어떤 팔레트 위치에 어떤 이름으로 존재하게 될 것인지를 지정하게 됩니다. 이 부분에서 이상하게 지어버린다면 평생 이 컴포넌트가 존재하고 사용되는한 이상한 이름으로 되겠죠^^ 신중히 선택해 줍시다.

6. 컴포넌트 저장하기

  프로젝트와 마찬 가지로 컴포넌트를 추가한 다음에도 따로 저장버튼을 눌러 파일을 저장해주어야 합니다. 저도 이게 맞는 건지 아님 다른 방법이 있는 것인지는 모르겠지만 약간 불편한 것 같긴 하군요.

7. 코드 추가하기

TTestGroupbox.h (Language : cpp)
  1. //---------------------------------------------------------------------------
  2.  
  3. #ifndef TestGroupBoxH
  4. #define TestGroupBoxH
  5. //---------------------------------------------------------------------------
  6. #include <SysUtils.hpp>
  7. #include <Classes.hpp>
  8. #include <Controls.hpp>
  9. #include <StdCtrls.hpp>
  10. //---------------------------------------------------------------------------
  11. class PACKAGE TTestGroupBox : public TGroupBox
  12. {
  13. private:
  14. protected:
  15.     __fastcall void Paint();
  16. public:
  17.     __fastcall TTestGroupBox(TComponent* Owner);
  18. __published:
  19. };
  20. //---------------------------------------------------------------------------
  21. #endif

  22.  


 

TTestGroupBox.cpp (Language : cpp)
  1. //---------------------------------------------------------------------------
  2.  
  3. #include <vcl.h>
  4.  
  5. #pragma hdrstop
  6.  
  7. #include "TestGroupBox.h"
  8. #pragma package(smart_init)
  9. //---------------------------------------------------------------------------
  10. // ValidCtrCheck is used to assure that the components created do not have
  11. // any pure virtual functions.
  12. //
  13.  
  14. static inline void ValidCtrCheck(TTestGroupBox *)
  15. {
  16.     new TTestGroupBox(NULL);
  17. }
  18. //---------------------------------------------------------------------------
  19. __fastcall TTestGroupBox::TTestGroupBox(TComponent* Owner)
  20.     : TGroupBox(Owner)
  21. {
  22. }
  23. //---------------------------------------------------------------------------
  24.  
  25. void __fastcall TTestGroupBox::Paint()
  26. {
  27. Canvas->TextOutA( 0, 0, "테스트" );
  28. }
  29.  
  30. namespace Testgroupbox
  31. {
  32.     void __fastcall PACKAGE Register()
  33.     {
  34.         TComponentClass classes[1] = {__classid(TTestGroupBox)};
  35.         RegisterComponents("Samples", classes, 0);
  36.     }
  37. }
  38. //---------------------------------------------------------------------------
  39.  

  일단 GroupBox 자체에서 Paint 메소드가 virtual 함수로 지정되어 있었고, 수정이 가능하기에 간단하게 이를 override 하여 기존에 존재하던 그룹박스의 이미지를 제거하고 문자열을 간단히 추가하도록 해봤습니다. 그런 다음 컴파일을 하여 인스톨 하면 됩니다.

8. 컴파일 후 인스톨 하기



  Build 메뉴 혹은 Make 메뉴를 선택하시고 Install 메뉴를 선택하시면 해당 패키지가 설치 됩니다. 만약 에러가 있다면 문법적 에러가 있을 것이고 해당 에러를 제거하신 뒤, 다시 설치하시면 됩니다.

9. 컴포넌트 사용하기



  이제 컴포넌트를 사용해 보는 일이 남았군요. 일단 New -> Form 을 클릭하신 다음 폼이 새로 추가 되면 오른쪽 아래 Tool Palette에서 TTestGroupBox 를 찾아 선택 후 창에 배치를 해봅시다. 짜잔~ 해당 창에 우리가 만든 TTestGroupBox가 배치 되었습니다. 해당 작동 그대로 "테스트"라는 문자열도 출력이 되는군요.

  이러한 방법을 통한 컴포넌트를 쉽게 생성해서 추후 원하는 GUI작업을 편하게 할 수 있을것이라 생각이됩니다^^. 편리한 방법이 계속해서 늘어나는 군요. 그럼 오늘도 즐거운 하루 되세요^^.

크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming" 분류의 다른 글

한게임 자동테트리스 Ver 0.6 (22)2008/11/15
한게임 자동테트리스 Ver 0.2 (22)2008/11/03
Read Sector From Floppy (0)2008/07/17
어제 무작정 맹글어봤던 것입니다.. (2)2008/07/16
Com Control에서 Event 제작하기 (0)2008/07/10
2008/06/26 11:40 2008/06/26 11:40
TAG Borland, C++, Codegear, Component
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/82

댓글을 달아 주세요

Codegear C++ Builder - Borland C++ Builder의 또다른 이름

Programming Tip 2008/03/27 23:47 귀차니스트
  어찌어찌 하다보니 Borland C++로 이미 작성되어 있는 소스를 맡게 될 것 같아 한 번 트라이얼 버젼을 구해서 깔아봤습니다. 그런데 이거 예상외로 UI쪽엔 물건이군요. 사실 MFC 쪽으로 UI 프로그래밍을 하다보면 불편한 부분이 적지 않게 많은데, Codegear C++ Builder 로 해보니 무척 편리하다는 것을 느꼈습니다.



  화면은 위 그림과 같은데 어떻게 느끼시나요? 물론 Visual Studio 와는 또 다른 형태이기 때문에 불편함을 느끼실 수도 있을것 같습니다. 하지만 제가 느끼기엔 말 그대로 RAD 툴이라고 불려도 손색이 없을것 같습니다. 특히 VCL 이라는 컴포넌트를 사용하여 컨트롤을 사용할 수 있다는 점이 무척 매력적이네요. 저도 오늘 처음 깔아본 것이라 아주 자세한 부분 까지는 잘 모르겠습니다. 하지만 Visual Studio.Net 이랑 연동하여 서로 상호보완적으로 개발하면 무척 편리한게 한 두가지가 아닐 것 같습니다.
  한 번 트라이얼 버젼이라도 사용해보시는게 어떠할까요?^^
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Programming Tip" 분류의 다른 글

OpenMP 라고 아십니까?? (0)2008/07/27
심심해서 구현해본 그래픽 요소 (0)2008/07/03
Child Window Mouse Message 문제. (0)2008/07/01
버퍼 오버플로우, 오버런이란?? (0)2008/04/27
GDI+ 사용 시 Smart Pointer 란?? (0)2008/04/12
2008/03/27 23:47 2008/03/27 23:47
TAG Borland, Builder, C++, Codegear
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/40

댓글을 달아 주세요

◀ 이전페이지 1 다음페이지 ▶

블로그 이미지
First Sensation 귀차니스트
rss
  • 관리자
  • 글쓰기

카테고리

  • 전체 (110)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (9)
    • TopCoder (3)
    • Library (2)
    • Programming (19)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (31)
    • Document (4)

최근에 올라온 글

  • Gradient 작성중에 있습.... (3)
  • 게임&인터랙티브 애플리....
  • 한게임 자동테트리스 Ve.... (24)
  • Intel 64 And IA32 Arch.... (2)
  • 한게임 자동테트리스 Ve.... (24)

최근에 달린 댓글

  • 다운어덯게 받아요. difl 2008
  • 멋있네요 ㅎㅎ. 준호씨 2008
  • ^^; 그러셨군요.. 사실 동영.... 귀차니스트 2008
  • ㅋㅋ 속도 튜닝의 무서움 ㅜ.... 귀차니스트 2008
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 2008

달력

«   2009/01   »
일 월 화 수 목 금 토
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

  • kkamagui 프로그래밍 세상.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 궁극의 예외처리. 이름없는 블로그 2008
  • Maximum sum. 티스토리 지점 2008

글 보관함

  • 2008/12 (1)
  • 2008/11 (4)
  • 2008/10 (2)
  • 2008/09 (3)
  • 2008/08 (5)

태그목록

  • TShell
  • Builder
  • Compiler
  • OTF
  • 입양
  • boost::shared_ptr
  • Graphi
  • Event
  • VCL
  • 홈브류
  • HTML 파서
  • boost::random
  • multimap
  • spirit
  • 표준
  • GDI+
  • ACM
  • Directive
  • System.Xml
  • 1.35
  • 뻘글
  • RLE8
  • 상속
  • priority_queue
  • Hilight
  • Linefeed
  • Dialog
  • HP
  • 타이틀
  • Inheritance

지역로그 : 태그 : 방명록 : 관리자 : 글쓰기
귀차니스트’s Blog is powered by Textcube 1.7.5 : Risoluto / Designed by DesignNia.net