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
[52315] Re:미리 만들어둔 Fream을 동적으로 생성 하여 TNotebook에 넣기가....
장성호 [nasilso] 1358 읽음    2008-02-18 14:48
음...
TNotebook은 TPageControl과 비슷합니다.

1. TPageControl 에 TabSheet를 추가하고 그위에 control을 동적으로 올릴때 
Control의 Parent를  무엇으로 설정해줄까요?  TPageControl 일까요?
아닙니다. TTabSheet입니다.

마찬가지로 TNotebook도 동적으로 control을  activepage에 올리려면?
TNotebook이 아닌 activepage의 control을 parent로 설정해 줘야 합니다.

2. 그럼 TNotebook에 control이 올라가는 컨테이너 컨트롤의 이름은 뭘까요?
TNotebook에 Button하나 올리고 Click이벤트에 아래오 같이 코딩해보세요

void __fastcall TForm1::Button5Click(TObject *Sender)
{
    String str=Button5->Parent->ClassName();
    ShowMessage(str);
}
Parent control의 classname은 TPage 로 나옵니다.

즉 동적으로 control을 new해서 parent를 설정해줄때 TPage형으로 해줘야 하는것입니다.
그런데 TNotebook에는 각 page에서   TPage를  알수 있는 방법(Method)가 없습니다.

3. 그래서 TNotebook의 vcl소스를 봤습니다.
TNotebook = class(TCustomControl)
  private
    FPageList: TList;
    FAccess: TStrings;
    FPageIndex: Integer;
   ...
위와같이 정의되어있더군요
코드를 보면 TPage는 TNotebook의 FPageList에 들어있습니다.
그런데 FPageList는 private멤버죠
그냥은 접근이 안되죠

4. 하지만 private멤버라도 얼마든지 접근할수 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=723
위 링크에 private멤버 접근하는 몇가지 방법에 대해 소개 해 놓았습니다.

5. 결론적으로
   님의 코딩에서 Frame의 Parent만  TNotebook의 FPageList에 있는 TPage 컨트롤로 설정해주시면 됩니다.


그럼..



모나리자 님이 쓰신 글 :
: 안녕 하세요.
: 몇칠째 찾아 보고 연구 해보고 했지만 잘 돼지 않아서 이렇게 글을 올리 됩니다.
: 미리 생성해둔 Fream을 동적으로 생성 해서 TNotebook 페이지에 Fream을 넣으려고 합니다.
: 제가 만든 예제 소스를 보여 드리자면...
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Notebook_Add(AnsiString strPageName)
: {
:     int iPageIndex;
:
:     Notebook->Pages->Add(strPageName);
:     iPageIndex = Notebook->Pages->IndexOf(strPageName);
:     Notebook->PageIndex = iPageIndex;
:
:     TFrame2 * pNewFrame = new TFrame2(NULL);
:     pNewFrame->Align = alClient;
:     pNewFrame->Parent = Notebook;                             
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: //
:     Notebook_Add("A");
: }
: //---------------------------------------------------------------------------
: 이런 식입니다...
: Button1을 클릭 했을 경우 Notebook_Add 함수를 호출 합니다.
: Notebook_Add 함수에서 페이지를 추가 하고 IndexOf 함수로 페이지 이름을 찾아 인덱스를 설정 합니다.
: 그리고 동적으로 Fream을 생성 하여 Notebook에 Fream에 넣습니다..
:
: 제 이론이 맞는지 알수 없지만..저렇게 하면 될꺼 같은데 잘 돼지 않습니다.ㅠ

+ -

관련 글 리스트
52312 미리 만들어둔 Fream을 동적으로 생성 하여 TNotebook에 넣기가.... 모나리자 1153 2008/02/18
52315     Re:미리 만들어둔 Fream을 동적으로 생성 하여 TNotebook에 넣기가.... 장성호 1358 2008/02/18
52316         Re:Re:미리 만들어둔 Fream을 동적으로 생성 하여 TNotebook에 넣기가.... 모나리자 1549 2008/02/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.