|
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);
: }
: //---------------------------------------------------------------------------
|