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
[53198] Re:Re:[질문]MainMenu 답변감사합니다
이성희 [] 1713 읽음    2008-04-21 16:32
답변감사드립니다.
많은 도움 되었습니다.
다시한번 감사합니다 ^^*

장성호 님이 쓰신 글 :
: [서론]
: TMainMenu는 
: 각 메뉴가  TreeView처럼 tree구조로 되어있습니다.
:
: TTreeView에서는 각 node가 TTreeNode 였는데...
: TMainMenu에서는  각 메뉴가 TMenuItem 입니다.
:
:
: MenuItem을 찾기만 하면 그다음은 Enable/Disable 시키거나
: Visible=true/false시키는것은 원하는대로 하시면 되겠죠
:
: [메뉴아이템을 찾는 방법]
:
: 1. MenuItem이름으로 찾기
:    1.1 가장 쉬운 방법으로  FindComponent를 쓰시면 됩니다.
:            TMenuItem *mnu;
:             mnu=(TMenuItem *)FindComponent("파일");
:             if(mnu)
:             {
:                   mnu->Enabled=true;
:                   mnu->Visible=true;
:             }

:     1.2 ...
:
: 2. 메뉴의 Caption으로 찾기
:      ; 메뉴의 caption으로 찾는것은 caption이 유일한 값이어야 겠죠?
:
:      2.1
:        앞에 서론에서 말한  tree구조를  따라가면서 for문을 돌리면 찾을수 있을것입니다.
:     TMenuItem * __fastcall TForm1::FineSubMenu(TMenuItem *pMnu,String sCaption)
:     {
:         TMenuItem *mnu;
:         for(int i=0;i<pMnu->Count;i++)
:         {
:             mnu=pMnu->Items[i];
:             if(mnu->Caption==sCaption)return mnu;
:             if(mnu->Count>0)
:             {
:                 mnu=FineSubMenu(mnu,sCaption);
:                 if(mnu!=NULL)return mnu;
:             }
:         }
:         return NULL;
:     }
:     TMenuItem * __fastcall TForm1::FineMainMenu(String sCaption)
:     {
:         TMenuItem *mnu;
:         for(int i=0;i<MainMenu1->Items->Count;i++)
:         {
:             mnu=MainMenu1->Items->Items[i];
:             if(mnu->Caption==sCaption)return mnu;
:             if(mnu->Count>0)
:             {
:                 mnu=FineSubMenu(mnu,sCaption);
:                 if(mnu!=NULL)return mnu;
:             }
:         }
:         return NULL;
:     }
:     //사용법
:            TMenuItem *mnu;
:             mnu=(TMenuItem *)FineMainMenu("파일");
:             if(mnu)
:             {
:                   mnu->Enabled=true;
:                   mnu->Visible=true;
:             }
:
:  
: 2.2
:      Components , ComnponentCount를 이용하여
:      //Form위의 모든 component를 loop 돌리면서 체크
:     //loop횟수는 2.1방법보다 많아질수 있지만 .. 재귀 for문을 안써도 됨
:     TMenuItem * __fastcall TForm1::FineMainMenu2(String sCaption)
:     {
:         TMenuItem *mnu;
:         for(int i=0;i<ComponentCount;i++)
:         {
:             if(Components[i]->ClassNameIs("TMenuItem")) //component중에 TMenuItem인것을 찾는다.
:             {
:                 mnu=(TMenuItem *)Components[i];
:                 if(mnu->Caption==sCaption)return mnu;
:             }
:         }
:         return NULL;
:     }
:    
:     //이방법에는 TMainMenu 의 메뉴가  TPopupMenu의 메뉴와  캡션이 같은게 있으면 문제가 될수있음
:    // 체크하는 루틴이 또 필요합니다.
:
:    //간단히 할수는 있는데.. 그부분은 직접해보세요
:
:
: [추신]
: 개인적으로..
: 권한에 따른 메뉴설정이 복잡하지 않으며
: Menu의 Tag값에다가    권한 번호를 주고
: db에서 auth값( int 값)을 읽어와서 tag값과 auth값을 비교해서 설정하는 방법으로  쓰기도 합니다.
:
: 그럼..
:
:
:
:
: 이성희 님이 쓰신 글 :
: : MainMenu 제어하는 방법을 찾아보다 답이 보이질 않아서 이렇게 글을 올립니다.
: : 현재 프로그램은 완성을 했는데 접속하는 ID마다 프로그램 접금 권한을 다르게 하려고 합니다
: :
: : 그래서 특정 ID는 메뉴 자체가 않보이게 막거나 실행 못시키게 막으려 하는데 방법을 모르겠습니다.
: : 현재 ID별로 메뉴목록을 따로 저장하고 접근가능 유무를 저장했습니다.
: : 접근권한 Table에는 메뉴항목의 Name/Caption 을 저장했습니다.
: :
: : 그런데 저장된 이내역을 활용을 할 수가 없어서 답답해서 글을 올립니다.
: : 부디 고수님들의 많이 조언 부탁드립니다.
: :
: : 그럼 수고하세요^^*

+ -

관련 글 리스트
53190 [질문]MainMenu 컨트롤방법 이성희 1154 2008/04/21
53193     Re:[질문]MainMenu 컨트롤방법 장성호 1493 2008/04/21
53198         Re:Re:[질문]MainMenu 답변감사합니다 이성희 1713 2008/04/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.