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
[48369] Re:Re:여러폼관리하기...
또아리 [] 1042 읽음    2007-03-13 12:44
TComponentList 등을 이용해서 폼/판넬들을 등록은 어떻게 하나요?...좀 제가 보기에 어렵게 되어 있는 코드 같은데 설명좀 해주시면 안될까요? 죄송합니다..(__)




이현진 님이 쓰신 글 :
: 또아리 님이 쓰신 글 :
: : 빌더 초짜인데요..질문이 있어서 질문좀 드릴려구요..
: :
: : 왼쪽에 트리뷰를 만들고 오른쪽에 해당폼을 번갈아 가면서 표시하고 싶은데요..
: : 탐색기 같은거죠..트리뷰가 있고 해당 아이템을 클릭하면 해당 페이지가 호출되게 하는..........물론 메인폼에서
: : 이걸 어떻게 해결해야 할지 모르겠어요..
: :
: : 임프님이 팁란에 적어놓은대로 오른쪽에 패널을 놓고 그안에 폼을 집어 넣긴했는데....워낙 폼이 많은데 상관없을까요?
: : 한 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:여러폼관리하기... 이현진 997 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.