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

컴포넌트/라이브러리
Delphi/C++Builder Programming Components&Libraries
[422] Toolbar 2000 / TBX / SpTBXLib hpp파일 수정하기
김상구.패패루 [peperu] 11095 읽음    2005-11-26 00:15
이번에 Toolbar 2000, TBX, SpTBXLib를 모두 설치해서 사용해야하는 상황이 되어서 설치해보니 컴포넌트 자체는 별 이상없이 잘 컴파일 되지만 막상 이를 사용해서 프로그램을 작성하면 컴파일시 에러가 발생하더군요.
원본 pas 소스와 비교하면서 제가 직접 수정한 hpp파일 목록 및 수정내역입니다.
사실 Tip란에 올릴까도 생각했지만 아무래도 Toolbar2000이나 TBX, SpTBX를 받으시면서 참고하시라고 이 곳에 작성하기로 했습니다. 도움이 되면 좋겠네요.

회사에서 설치할 때는 다른 hpp파일이 하나 더 문제가 됐던 것 같은데 집에서는 이상하게 재현이 되질 않네요. 혹시 빠뜨린 부분이 있으면 추가로 작성에 놓겠습니다.

TBX설치 후 hpp파일 수정목록

Toolbar2000: 여기서 발생하는 컴파일 에러는 이미 다른 곳에서 #define으로 정의된 이름을 const로 재정의하려다보니 눈으로 보기엔 문법상 문제가 전혀 없지만 실제 컴파일시에는 에러가 발생하는 것입니다.
따라서 #ifndef / #endif로 감싸주면 간단하게 해결됩니다.

--- TB2Common.hpp ---
#ifndef PopupMenuWindowNCSize
static const Shortint PopupMenuWindowNCSize = 0x3;
#endif
#ifndef DT_HIDEPREFIX
static const int DT_HIDEPREFIX = 0x100000;
#endif

TBX: 여기서 발생한 에러는 TBX소스가 잘 못 된 부분입니다. Delphi에서는 대소문자를 가리지 않아서 에러가 나지 않지만 C++에서는 여지없이 에러가 뜨죠. 사실 이 부분은 pas파일에서 수정하는 것이 맞습니다만 귀찮다면 그냥 hpp에서 간단하게 수정하시면 됩니다.
--- TBXDkPanels.hpp ---
// Wrong case D -> d
//  __property DropDownCombo  = {default=0};
  __property DropdownCombo  = {default=0};
//  __property DropDownMenu ;
  __property DropdownMenu ;


SpTBXLib: 여기서 발생한 에러는 똑같은 구조체가 두번 선언돼서 생기는 문제입니다. pas소스에서는 당연히 한 번만 선언되어 있으나 왜 hpp가 생성되면서 두번 선언되는지 이유는 저도 잘 모릅니다. 그냥 커맨트 처리 하시면 되겠습니다.
--- SpTBXEditors.hpp ---
// Just comment following block(second part) - Multiple declaration problem.
/*
#pragma pack(push, 4)
struct TSpTBXDockingState
{
    Tb2dock::TTBDock* Dock;
    TSpTBXDockablePanel* MaximizedSibling;
    Types::TPoint Size;
    Types::TPoint RestoreSize;
    Types::TPoint FloatingRestoreSize;
    bool Maximized;
    bool Minimized;
    bool FloatingMinimized;
} ;
#pragma pack(pop)
*/

여기까지입니다. 모든 툴바2000관련 컴포넌트를 다 올려놓고 컴파일 했을때 전혀 이상없이 잘 되는군요.
혹시나 다른 문제가 발견될 경우 추가해 작성하도록 하겠습니다.

PS. 발견했습니다. ThemeManager와 함께 사용하는 경우 문제가 엄청난 충돌문제가...
우선 hpp파일은 ThemeMgr.hpp을 제일 먼저 인클루드 하시기 바랍니다. TBX의 Theme가 먼저 인클루드 되는 경우 uxtheme.h에서 문제가 발생합니다.
다음, 컴파일을 시도하면 TBXUxThemes.hpp에서 끊임없는 에러가 발생할텐데... 이는 앞서 Toolbar2000에서 일어나는 문제와 동일한 이유때문입니다. Windows SDK의 uxtheme.h 파일에서의 정의와 충돌합니다. 따라서 오류가 발생하는 부분을 모두 #ifndef ..... #endif로 감싸주시면 됩니다. 빌더의 매크로 기능을 이용하시면 쉽게 처리하실 수 있을겁니다.
매크로 기능을 모르시는 분을 위해...
Ctrl+Shift+R: 레코딩 시작 / 종료
Ctrl+Shift+P: 리코드된 매크로 실행

+ -

관련 글 리스트
422 Toolbar 2000 / TBX / SpTBXLib hpp파일 수정하기 김상구.패패루 11095 2005/11/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.