Q&A

  • Delphi7 MainMenu에서 MenuItems찾는 방법
메뉴에 권한을 부여하는 기능을 구현해보려 합니다.

MainMenu에서 각각의 MenuItems에 권한을 부여하기 위해서

모든 MenuItems를 찾아가며 DB에서 불러온 사용자별 권한 string에
각 MenuItem의 Name속성이 포함되어 있을경우 해당 MenuItem을 Enable시키고
포함되지 않은 것 들은 모두 Disable시키려합니다.

MainMenu 클래스에서 각 MenuItems를 찾는 방법을 알고 싶습니다.
(MenuItem에는 Items라는 배열이 있던데...)



혹시 이보다 더 좋은 각 항목별 권한 설정방법이 있다면 어떤것이 있을까요.
여러분들은 어떤 방식으로 각 항목에 권한을 부여하시는지 궁금합니다



<추가내용>

프로그램에서 MainMenu는 DataModule에 따로 빼서 작성을 하였구요,
로그인이 되면 아래와 같은 함수가 실행이 되면서 권한을 부여하게 해놓았습니다.
<!--CodeS-->
procedure TravelMenuItem2(MainMenu: TMainMenu; ProgIDs: String);
var
  Loop: Integer;
begin
  if MainMenu <> nil then begin
    for Loop:= 0 to MainMenu.Items.Count - 1 do begin
      if Pos(MainMenu.Items[Loop].Hint, ProgIDs) > 0 then
                MainMenu.Items[Loop].Enabled:= True
      else if MainMenu.Items[Loop].Tag = 0 then MainMenu.Items[Loop].Enabled := False;
    end;
  end;
end;
<!--CodeE-->

위에서 ProgIDs는 DB에서 권한이 있는 항목의 이름이 들어있는 string구요
각각의 MenuItem에는 Hint에 해당 프로그램의 이름이 들어있어서 이걸 비교하게 해놓았습니다.

그런데 위의 함수와 같이 하면 하위메뉴들의 권한을 체크되질 않네요.

이것이 가능하게 하려면 우찌 해야할까요?
1  COMMENTS
  • Profile
    최용일 2005.10.17 02:09
    안녕하세요. 최용일입니다.

    TMenuItem뿐만아니라 델파이의 모든 컴포넌트에는 Tag란 속성이 있습니다. 이걸 이용해보세요...

    권한은 문자열보다는 Bit-Flag를 이용하시는것이 좋을듯 하네요...

    각각의 비트별로 권한을 부여해서 그 비트가 셋되었을때 권한을 enable시키시는것이 다양한 권한을 설정할 수 있는 좋은 방법입니다. Tag속성만이용해도 Tag가 Integer이니까 32가지 권한을 설정할 수 있죠...

    하위 메뉴까지 체크하실려면 재귀호출을 이용하시면 편합니다.

    ^^ 항상 즐코하세요...