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
[59097] Re:Re:컴포넌트안의 컴포넌트
강대민 [] 1683 읽음    2009-11-13 15:01
답변감사드립니다 ^^ 

저도 동적생성보다 그냥 해서 쓰고싶었는대

class PACKAGE TKListView : public TCustomControl

요런식으로 파생받아서 커스텀컨트롤만드는것이라  폼디자인이 따로없더군요..

어떻게 컨트롤을 올려놓을수있나요??

현재는 2번방법으로 프로그램을 더진행할수는 있을꺼같습니다

답변감사드립니다...   장성호님덕분에 저도 용기를내서 계속 빌더를쓸수가있습니다 ^^

_(__)_



장성호 님이 쓰신 글 :
: [문제 원인]
: 님께서 TSkinControl을 동적으로 생성하셔서 그런것입니다.
:
: Designtime에 폼위에 올려진 control및 component정보는   xxxx.dfm 파일에 기록됩니다.
: 프로퍼티수정한 정보도 모두 xxx.dfm 에 들어가게 되죠
:
: 하지만 아래 코드처럼 ScrollBar1처럼 동적으로 생성한 Control은 xxx.dfm 파일에 정보자체가 없습니다.
:
: xxx.dfm은 컴파일하면 exe에 리소스로 포함이 되며
:
: Form이 생성될때 리소스에 포함된 xxx.dfm파일을 읽어와서
: 해당 Control을 생성하고 control의 property를 변경해주는것입니다.
:
:
: 해결방법은?
:    방법1.   동적생성하지 않는 방법이있습니다.
:       아래 코드를 보면 VScrollBar 라는 TSkinControl형의 프로퍼티가 있네요
:       내부에서 동적생성하여 쓸거라면 저 프로퍼티가 필요없을것 같은데....
:
:       저렇게 해두면 다른 TSkinControl을 폼위에 올리고 프로퍼티로 설정하면...
:       동적생성한 놈은 쓸모없게 되죠
:  
:       동적생성쓰지 말고 그냥 저렇게 프로퍼티로 Form위에 ScrollBar를 올려서 설정하는 방법이 있을것 같습니다.
:
:   방법 2. 프로퍼티에서 VScrollBar같은것은 빼구요
:       TSkinControl의 프로퍼티에서 꼭 필요한것을 TKListView의 프로퍼티로 만듭니다.
:        read , write 함수에서 내부에 TSkinControl정보를 읽어 return해주거나 , 설정해줘야 겠죠..
:
:
: //동적생성은 그대로 쓰구...
:  __fastcall TKListView::TKListView(TComponent* Owner)
:  	: TCustomControl(Owner)
:  {
:  	ScrollBar1=new TSkinControl(this);
:  }
: 
: // Header에서는 ...
:          TSkinControl   *ScrollBar1;      
:  
:         TColor __fastcall GetScrollBarColor()
:         {
:                  return ScrollBar1->Color;
:         }
:         void  __fastcall SetScrollBarColor(TColor clr)
:         {
:                  ScrollBar1->Color=clr;
:         }
: 
:  __published:
:  __property TColor ScrollBarColor={read = GetScrollBarColor, write=SetScrollBarColor};
:         
: 
   
:
:
: 위와같이 하면 ...
: ScrollBarColor라는 프로퍼티는  TKListView 컨트롤의 프로퍼티가 되어  xxx.dfm에 저장되게 됩니다.
:
: 그럼..
:
:
:
: 강대민 님이 쓰신 글 :
: : (1)
: : __fastcall TKListView::TKListView(TComponent* Owner)
: :     : TCustomControl(Owner)
: : {
: :     ScrollBar1=new TSkinControl(this);
: :                .
: :                .
: :                .
: : }
: :
: : (2)
: : __published:
: : __property TSkinControl* VScrollBar={read = ScrollBar1, write=ScrollBar1};
: :
: :
: : ---------------------------------------------
: :
: : TKListView라는 컴포넌트를 만들고있습니다 기존에만들어두었던
: :
: : TSkinControl 컨트롤도 내부에 포함시켜 만들려고 위의 소스처럼 생상자에서(2) new 를하고
: :
: : (2)프로퍼티를 다음과같이 설정했습니다...
: :
: : 잘되는듯하는대 문재가  디자인모드에서 VScrollBar의 프로퍼티등 정상적으로 접근과 수정이되는대
: :
: : 막상컴파일해서 실행할때는 적용이 되어있지않내요...  이런경우는 어떻게 해야하나요?
: :
: : 고수님들의 답변 기다리겠습니다..

+ -

관련 글 리스트
59090 컴포넌트안의 컴포넌트 강대민 1415 2009/11/12
59093     Re:컴포넌트안의 컴포넌트 장성호 1657 2009/11/13
59097         Re:Re:컴포넌트안의 컴포넌트 강대민 1683 2009/11/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.