저는 Panel로 다합니다....문론 다른 방법도 있어요....
첨부한 소스를 참조하세요
1번은 똑같은 차일드를 여러개 뛰우는거면 그냥 차일드에 넣고 코딩하세요.
그래도 메인 컴포를 차일드에 넣으시려면, 메인폼에서 Panel하나에 툴바등 컴포넣고 디자인하세요.
그리고 차일드 생성시 차일드에도 Panel하나 만드신다음 show와 close에 각각 코딩하세요
이 방법 보다는 2로 하세요 메인폼은 왠만하면...별도의 폼에 관리하시는게 나중에라도 좋습니다.
<!--CodeS-->
폼1
procedure TForm1.Button1Click(Sender: TObject);
begin
if not(assigned(Form2)) then
Form2 := TForm2.Create(nil);
Form2.Show;
end;
폼2
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Panel1.Parent := Form1.Panel3;
Action := caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := nil;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Form1.Panel1.Parent := Panel1;
end;
<!--CodeE-->
2번도 Panel로 다 할 수있습니다.
차일드폼능 생성하되 보이지 마십시요.
도킹이니 차일드일 필요가 없어요. 만약 차일드로 했다면 스타일을 fsNormal로 바꾸세요
아래 예는 메인폼의 Panel4에 도킹할폼의 Panel을 넣다 뺐다합니다.
도킹폼의 Visible은 False이고 show안하고 Create만 합니다
<!--CodeS-->
폼1
procedure TForm1.Button2Click(Sender: TObject);
begin
if not(assigned(Form3)) then
Form3 := TForm3.Create(nil);
//Form3.Show;
end;
폼3
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Panel1.Parent := Form3;
Action := caFree;
end;
procedure TForm3.FormDestroy(Sender: TObject);
begin
Form3 := nil;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
Panel1.Parent := Form1.Panel4;
end;
<!--CodeE-->
그리고 중요한건 리소스를 잘 관리하기 위해 서브폼을 언젠가는 삭제해야합니다
여기선 메인폼 close에 넣어습니다
<!--CodeS-->
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (assigned(Form2)) then Form2.Close;
if (assigned(Form3)) then Form3.Close;
end;
<!--CodeE-->
srhong/////////////////////////////////////////////////////////////////
첨부한 소스를 참조하세요
1번은 똑같은 차일드를 여러개 뛰우는거면 그냥 차일드에 넣고 코딩하세요.
그래도 메인 컴포를 차일드에 넣으시려면, 메인폼에서 Panel하나에 툴바등 컴포넣고 디자인하세요.
그리고 차일드 생성시 차일드에도 Panel하나 만드신다음 show와 close에 각각 코딩하세요
이 방법 보다는 2로 하세요 메인폼은 왠만하면...별도의 폼에 관리하시는게 나중에라도 좋습니다.
<!--CodeS-->
폼1
procedure TForm1.Button1Click(Sender: TObject);
begin
if not(assigned(Form2)) then
Form2 := TForm2.Create(nil);
Form2.Show;
end;
폼2
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Panel1.Parent := Form1.Panel3;
Action := caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := nil;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Form1.Panel1.Parent := Panel1;
end;
<!--CodeE-->
2번도 Panel로 다 할 수있습니다.
차일드폼능 생성하되 보이지 마십시요.
도킹이니 차일드일 필요가 없어요. 만약 차일드로 했다면 스타일을 fsNormal로 바꾸세요
아래 예는 메인폼의 Panel4에 도킹할폼의 Panel을 넣다 뺐다합니다.
도킹폼의 Visible은 False이고 show안하고 Create만 합니다
<!--CodeS-->
폼1
procedure TForm1.Button2Click(Sender: TObject);
begin
if not(assigned(Form3)) then
Form3 := TForm3.Create(nil);
//Form3.Show;
end;
폼3
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Panel1.Parent := Form3;
Action := caFree;
end;
procedure TForm3.FormDestroy(Sender: TObject);
begin
Form3 := nil;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
Panel1.Parent := Form1.Panel4;
end;
<!--CodeE-->
그리고 중요한건 리소스를 잘 관리하기 위해 서브폼을 언젠가는 삭제해야합니다
여기선 메인폼 close에 넣어습니다
<!--CodeS-->
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (assigned(Form2)) then Form2.Close;
if (assigned(Form3)) then Form3.Close;
end;
<!--CodeE-->
srhong/////////////////////////////////////////////////////////////////