장성호 님이 쓰신 글 :
: 음...
: 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에 넣습니다..
: :
: : 제 이론이 맞는지 알수 없지만..저렇게 하면 될꺼 같은데 잘 돼지 않습니다.ㅠ
이렇게 자세 하게 설명 해주셔서 고맙습니다.
한번 만들어 보고 소스를 올려 보도록 하겠습니다.ㅎㅎ)휴...오늘은 완성을 해야 할텐데;;