|
아래는 도킹을 참조하라고 넣은거고요..
부모폼은 지도이고..도킹되는 폼은 지도 컨드롤입니다.
제가 하려는것은 도킹을 하면 패널크기밖에 도킹된 폼이 안보이잖아요..
아무폼도 안 되었을때는 부모폼이(지도) 전체를 차지하고..
도킹되면 부모폼은 좀 작아지고..도킹되는 폼(지도 컨트롤)은 다 보이게 하려는데..
말을 좀 어렵게 섰는데..이해되죠..제가 글 솜씨가 없서서..^^!보와 주세용..
폼하나에 패널을 두개 두고, 실행시 각 패널에 2개의 폼을 Docking 시키는 예입니다.
1. New Application을 하시구요. 기본으로 저장을 하시길.(Unit.cpp)
2. Form1 위에 Panel1, Panel2를 놓구요.
Panel1과 Panel2의 property 중 DockSite를 'true'로 합니다.
3. 이제 New Form을 두번하셔서, Form2, Form3를 생성합니다.
4. Form2, Form3의 property 중 DragKind = dkDrag, DragMode = dmManual 로 각각
설정합니다. *** 이것으로는 안되었고요 (Docking을 할 Form의 DragKind = dkDock로 설정하시고 DragMode = dmAutomatic ) 이것으로 하니 되었습니다. 참조하세요
4. 마지막으로 Unit1.cpp 에 아래와 같이 코딩합니다.
#include "Unit1.h"
#include "Unit2.h" // 추가합니다.
#include "Unit3.h" // 추가합니다.
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form2->Show();
Form3->Show();
Form2->ManualDock(Form1->Panel1, NULL, alClient);
Form3->ManualDock(Form1->Panel2, NULL, alClient);
}
//---------------------------------------------------------------------------
대충 감이 오시져? 동적생성을 하셔도 되구 활용하기에 따라서 여러가지로 쓰일수
있습니다.
TControl::ManualDock
(원형) bool __fastcall ManualDock(TWinControl* NewDockSite, TControl* DropControl, TAlign ControlSide);
(상세) 수동적으로 dock 하기위해 ManualDock를 사용한다. ManualDock는 현재 도킹되어
있는 dock site로부터 control을 분리하고, 다른 dock site에 control을 도킹한다.
NewDockSite는 control의 새 dock site이다.
DropControl은 drop되는 새 dock site내의 컨트롤이다. 예를 들면 Page Control에 Docking
을 하면, DropControl은 Tab Sheet일 것이다. (Form이라도 Page Control에 Docking되면 Tab
Sheet가 되고 만다)
ControlSide는 dock될 control의 DropControl 또는 (DropControl이 NULL이라면)NewDockSite의
side를 결정한다. 이러한 값은 dock site의 GetDockEdge 메쏘드를 호출함으로써 알 수 있다.
String => Int
StrToInt(String)
|