임프랍니다..
오늘도 재미있는 팁 하나를 가지고 상쾌한 하루를 시작합시다.
오늘의 팁은, 패널에(혹은 다른 윈도우컨트롤에) 폼을 집어넣기 입니다.
이 팁의 핵심은 간단합니다. 폼도 TControl의 자손이기 때문에, 윈도우컨트롤에
집어넣을 수 있습니다. 하지만, 이 간단한 원리의 응용은 생각보다 쇼킹합니다.
일단.. 코드를 작성해봅시다.
Form1과 Form2, 두개의 폼을 가진 프로젝트를 하나 작성합시다.
그리고 Form1에는 패널을 하나 놓습니다. 크기는 좀 큼직하게.. 얼라인을 alClient로
만들어도 좋겠네요. 하지만, 버튼을 하나 놔야 하니까 약간의 공간이 남게 합시다.
그리고 버튼을 하나 놓고.. OnClick 핸들러를 작성합시다.
// C++ 코드
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2 = new TForm2 (Panel1);
Form2->Parent = Panel1;
Form2->Left = 0;
Form2->Top = 0;
Form2->Visible = true;
}
// 델파이 코드
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Panel1);
Form2.Parent := Panel1;
Form2.Left := 0;
Form2.Top := 0;
Form2.Visible := true;
end;
당연히 Form2는 프로젝트 옵션에서 Available로 옮겨놔야겠죠? 동적으로 생성하니까.
그리고.. Form2의 OnClose 핸들러를 작성합시다. 간단히~
// C++ 코드
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
// 델파이 코드
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
동적으로 생성하니까, 닫을때 자동으로 날려버릴수 있도록 하는거죠.
자아.. 이걸로 끝입니다. 간단하죠? 실행해보세요.
폼이 패널 안에 뜹니다. 무슨 MDI처럼. 하지만 MDI는 아니죠.
흠.. 재미있긴 한데 이게 뭔 소용이 있냐구요? 소용이 있죠~!
폼의 BorderStyle을 bsNone으로 놓는다고 생각해봅시다.
그럼... dfm으로 작성한 폼을, 마치 새로운 컨트롤인것처럼 써먹을 수 있죠~
패널에도 놨으니, 페이지컨트롤의 탭시트에도 폼을 얹어놓을수 있겠죠?
그럼 탭시트에 폼디자이너로 미리 디자인된 컨트롤들을 올려놓을 수 있는거죠.
아주 여러가지로 응용이 되겠죠? ^^
그럼, 도움되시길 바라면서, 이만...
독립문에서 임펠리테리였습니다.