|
답변감사드립니다.
많은 도움 되었습니다.
다시한번 감사합니다 ^^*
장성호 님이 쓰신 글 :
: [서론]
: 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 을 저장했습니다.
: :
: : 그런데 저장된 이내역을 활용을 할 수가 없어서 답답해서 글을 올립니다.
: : 부디 고수님들의 많이 조언 부탁드립니다.
: :
: : 그럼 수고하세요^^*
|