C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[48365] Re:여러폼관리하기...
이현진 [cyberpd] 996 읽음    2007-03-12 18:43
또아리 님이 쓰신 글 :
: 빌더 초짜인데요..질문이 있어서 질문좀 드릴려구요..
:
: 왼쪽에 트리뷰를 만들고 오른쪽에 해당폼을 번갈아 가면서 표시하고 싶은데요..
: 탐색기 같은거죠..트리뷰가 있고 해당 아이템을 클릭하면 해당 페이지가 호출되게 하는..........물론 메인폼에서
: 이걸 어떻게 해결해야 할지 모르겠어요..
:
: 임프님이 팁란에 적어놓은대로 오른쪽에 패널을 놓고 그안에 폼을 집어 넣긴했는데....워낙 폼이 많은데 상관없을까요?
: 한 100개정도....도와주세요...

많은 수의 폼 또는 판넬들을 특정 메뉴에 따라 보이게 또는 않보이게 하려면, 일일이 해당 메뉴 선택시 관련된 컴포넌트를 Show(), Hide() 함수 호출하기는 삽질이겠죠? :-)

저는 삽질을 줄여보고자 메뉴에 사용되는 폼 또는 판넬들을 목록으로 만들어 관리합니다.
TComponentList 등을 이용해서 폼/판넬들을 등록하고, 원하는 폼/판넬을 검색하여 Show() 함수를 호출하고,
나머지는 Hide() 함수를 호출하도록 하였습니다.

그것을 또 코딩할 때 알아보기 쉽도록  std:map을 이용하여 메뉴 목록을 만들어 사용중입니다.

class TUIForm : public TForm
{
private:
  /*** 생략 ***/
  enum EMENU
  {
    MENU_SYSTEM=0,
    MENU_ALARM_LIST,
    MENU_EVENT_LIST,
    MENU_SETUP
  };

    std::map<EMENU,TComponent*> menu_map;
   
    /*** 생략 ***/
   
    void __fastcall ViewMenu(EMENU _menu);
};
//---------------------------------------------------------------------------

__fastcall TUIForm::TUIForm(TComponent* Owner)
  : TForm(Owner)
{
    menu_map[MENU_SYSTEM]=SystemPanel;
    menu_map[MENU_ALARM_LIST]=AlarmListPanel;
    menu_map[MENU_EVENT_LIST]=EventListPanel;
    menu_map[MENU_SETUP]=SetupPanel;
}
//---------------------------------------------------------------------------

void __fastcall TUIForm::ViewMenu(EMENU _menu)
{
    try
    {
        std::map<EMENU,TComponent*>::iterator iterator=menu_map.find(_menu);
        if(iterator==menu_map.end()) return;

        TCustomControl* view=dynamic_cast<TCustomControl*>(iterator->second);
        if(view!=NULL)
        {
            view->Show();
            view->BringToFront();
        }

        for(std::map<EMENU,TComponent*>::iterator iterator=menu_map.begin();
            iterator!=menu_map.end(); ++iterator)
        {
            if((iterator->first)!=_menu)
            {
                TCustomControl* hide=dynamic_cast<TCustomControl*>(iterator->second);
                if(hide!=NULL)
                {
                                 hide->Hide();
                }
            }
        }

        if(view!=NULL)
        {
            view->Update();
        }
    } catch(...)
    {
    }
}
//---------------------------------------------------------------------------

void __fastcall TUIForm::MainToolButton1Click(TObject *Sender)
{
    ViewMenu(MENU_SYSTEM);
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
48364 여러폼관리하기... 또아리 908 2007/03/12
48365     Re:여러폼관리하기... 이현진 996 2007/03/12
48369         Re:Re:여러폼관리하기... 또아리 1042 2007/03/13
48372             Re:Re:Re:여러폼관리하기... 이현진 1597 2007/03/13
48373                 Re:Re:Re:Re:정말 감사합니다.(냉무) 또아리 877 2007/03/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.