Q&A

  • MDI 메인폼 컨트롤 공유
질문 1 )

    MDI 메인폼에 툴바와 버튼을 올려놓았습니다. (입력, 수정, 삭제, 조회 버튼 등등)
    이 툴바를 차일드폼에서 공유하여 사용하려고 합니다.

    차일드폼이 없으면 메인폼의 툴바는 안보이게 하고,
    차일드폼이 생성될때 마다 메인폼에 있는 툴바와 버튼을 차일드 폼에 넣으려고 합니다.

질문 2 )
     Panel 에 MDI Child 폼을 넣을 수 있습니까?
2  COMMENTS
  • Profile
    홍성락 2008.03.27 03:33
    저는 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/////////////////////////////////////////////////////////////////
  • Profile
    coderoad 2008.03.27 06:10
    감사합니다.

    많은 도움이 되었습니다.