没有看错吧,你定义这么多字段做什么?其实只有一个字段就可以了,不同的组合可以有不同的权限;
这样吧:
你只用一个这段:
先定义一个集合,然后取出权限字段值;
Case FieldByName('xxx').AsString ...
..:...
..:...
..:..
end;

解决方案 »

  1.   

    首先定义权限掩码如下:
    A=1;B=2;C=4;D=8;E=16($10);F=32($20);G=64($30);
    然后按照相应权限设置各个菜单项的Tag值为相应权限掩码的和,如菜单1的权限为A,C,E,则其Tag值为:21;
    在登录后,根据登录用户权限设置变量Limit的值为此用户的权限掩码和;如:此用户的权限为A,C,则Limit=5;
    执行如下代码
    for i := 0 to MainMenu1.Items.Count - 1 do
      MainMenu1.Items.Items[i].Visible := Boolean(MainMenu1.Items.Items[i].tag and Limit);
      

  2.   

    TO :ihihonline(小小->不要再流浪!!) 你说的方法如果我条件多的话,那你一个字段我要写多少种条件组合啊!
      

  3.   

    从数据库中根据用户提取数据,生成一整数:flag:=a*1+b*2+c*4+d*8+e*16+f*32
    设定主菜单的各子菜单的tag属性,如菜单一 的tag = 1+4+16=21 ....
    代码很简单:
       for i:=0 to mainmenu.items.count-1 do
       mainmenu.items[i].visible:=(mainmenu.items[i].tag and flag)=0;
      

  4.   

    hehe! 
    怎么和 MSHawk(憨憨)老兄重了
      

  5.   

    hehe! 
    怎么和 MSHawk(憨憨)老兄重了
      

  6.   

    TO :ihihonline(小小->不要再流浪!!) 确实有你说的用户的权限可以删除或增加,但是如果象你所说的,我现在有8个权限,那么我的这一个字段里的值就是
    很多了(排列组合我忘记了),应该不少,你的意思是这样的吗?还是我没理解你的说法?请再次指教!谢!
      

  7.   

    如果你的菜单位置和表的字段位置一样,就很好办,用一个循环就搞定了:for i:=0 to Menu.Items.Count-1 do
    begin
      Menu.Items[i].Visible:=Fields[i].AsBoolean;
    end;
      

  8.   

    如果没有,也很好办,不过麻烦一点儿,就是利用Tag或者MenuItem的Hint属性!
      

  9.   

    TO:Kingron,呵呵,高手,向你学习,你说的TAG就是用楼上的方法,那Hint怎么用呢,希望赐教!
      

  10.   

    Hint就是,把字段的名字如A放到Menuitem.Hint中,代码就不使用Fields[i]而使用FieldByName(Menu.Items[i].Hint).AsBoolean;
    当然,你要先判断MenuItems[i].Hint的有效性。