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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[846] TdxButton을 컴포넌트 설치 없이 컴포넌트 교체식으로 사용하기.
김태선 [cppbuilder] 7714 읽음    2009-01-22 02:27
TurboC++ 2006 Explorer는 컴포넌트 설치가 되지는 않지만,
강력한 C++ 컴파일러와 Delphi 컴파일러를 내장하고 있습니다.
또한 상용 프로그램까지 마음대로 만들수 있는 버전임에도 불구하고 DB 컴포넌트 등
기본 내장된 컴포넌트들이 좋은 것이 너무나 많습니다.
정말 멋진 개발툴이 아닐 수 없습니다.

프로그램 UI 디자인시는 조금 불편하고, 나름대로 버그와 문제가 좀 있기는 하지만,
충분히 쓸모가 많은 개발툴입니다.

여기 뿐만 아니라 모든 빌더 버전에서 사용할수 있는 기법인데,
버턴 중에 무료 버전이면서 유명한 TdxButton을 컴포넌트 교체식으로 넣어 보겠습니다.
빌더6도 아닌데 왜 굳이 버턴을 TdxButton으로 바꾸려고 하는가 하면
버턴은 UI에서 가장 많이 쓰이는 컨트롤인데, 사실 빌더 2009까지 비교해봐도
TdxButton이 가장 이쁘기 때문입니다.(물론 제 주관적인 관점에서)
XP가 아닌 경우에도 그 모양 그대로 유지하기 때문에 나름 장점이 많다고 생각됩니다.

기법 그 자체는 제가 개발해서 이미 여러차례 선을 보였기 때문에 그 다지 새로울 것은 없습니다.

일단 UI 디자인 할때는 그냥 TButton으로 합니다.

헤더 파일을 한 라인을 추가합니다.
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
#define TButton ::TButton  // <------------- 이 부분.
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TButton *Button2;
    TButton *Button3;
    TButton *Button4;
    TButton *Button5;
    TButton *Button6;
    void __fastcall FormCreate(TObject *Sender);
private:    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

위 한 줄은 기존 TButton이 새로 내가 만드는 버턴으로 컴파일 링크시 교체 되도록 합니다.
cpp 소스 파일에

#include "dxButtons.hpp"

class TButton : public TdxButton
{
    // 코드 불필요.
};

#include "Unit1.h"

이런 식으로  코드를 넣으면 작업 끝입니다.

이렇게 하면 기존 TButton이 TdxButton을 상속받아 새로 정의한 TButton으로 교체되는 것입니다.

만일 TdxButton 컴포넌트가 설치되어 있다면 이 이상 작업이 필요없지만
(물론 일상적인 컴포넌트 디렉토리로 옵션을 맞춰주는 작업을 뺀다면)
컴포넌트를 설치 하지 않은때 이 작업을 성공하려면
다음과 같은 추가 조치가 필요합니다.

이는 TurboC++ 2006 Explorer 기준이고 다른 빌더 버전은 폴더를 굳이 이렇게 안하고 다른 폴더에 두어도 됩니다.
TurboC++ 2006 Explorer 에 내장된 델파이 컴파일러의 문제 때문에
일단 TdxButton 컴포넌트에 쓰인 델파이 소스 코드(*.pas)를
현재 프로젝트로 옮깁니다. 그리고 패키지를 만들기 위해 사용한 소스와 RegisterComponents 가 있는
소스는 빼고 나머지 *.pas를 프로젝트에 추가합니다. dxCore.res도 포함합니다.

그리고 컴파일 하면 작업 끝.

TurboC++ 2006 Explorer 버전에서도 컴포넌트 설치 기능 지원을 받지 않고도 마음대로
컴포넌트를 사용할 수 있게 됩니다. 완벽하게 하나의 실행파일로 통합 됩니다.

예제에 보인 컴포넌트외 다른 컴포넌트인 경우 델파이 컴파일러 버전 문제에 따라 컴파일이 완료되지 않는 경우도 있습니다.
이는 빌더 엔터프라이즈 버전까지 동일한 문제이니 해당 델파이 컴파일러 버전에 맞게 컴포넌트가 개선된 것을 써야 합니다.


이 실험은 빌더6와 TurboC++ 2006 Explorer에서 행해진 것입니다.
김태선 [cppbuilder]   2009-02-28 07:01 X
TdxButton은 TBitBtn과 상당히 유사하므로,
TBitBtn을 아래처럼 컴포넌트 교체식으로 바꾸는 것이 훨씬 더 편리합니다.
디자인 타임에 Glyph 및 이벤트 핸들러도 그대로 쓸수 있기 때문입니다.

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include "dxButtons.hpp"
#include "dxCore.hpp"
//---------------------------------------------------------------------------
class TBitBtn : public TdxButton { };
#define TBitBtn        ::TBitBtn

class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TButton *Button2;
    TMemo *Memo1;
    TBitBtn *BitBtn1;
    TdxButton *dxButton1;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall Button2Click(TObject *Sender);
    void __fastcall BitBtn1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

+ -

관련 글 리스트
846 TdxButton을 컴포넌트 설치 없이 컴포넌트 교체식으로 사용하기. 김태선 7714 2009/01/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.