根据名称字符串,确定菜单的Visible或Enabled,如何实现?(50分)

  • 主题发起人 主题发起人 ZhongDe
  • 开始时间 开始时间
Z

ZhongDe

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把系统的所有用户的权限放入一个数据表中,请问不用if...else 和case of ,怎样根据当前用户的权限确定哪些菜单可见哪些不可见
 
你的“系统”指什么系统?操作系统还是一个项目系统?
如果不是指的操作系统,呵呵,你就要定义一个权限的集合,这个集合是总的一个集合,
对于不同用户的权限是这个集合的一个子集,结合你所提的问题,这个集合中的元素的含义
可以是你的菜单的可见性,在不同的用户使用系统的时候,根据不同的用户的权限集合来
确定菜单的可见性。一个简单的办法是你的用户的级别是有限的,你可以对每类用户写一个
函数,由这些函数来显示该类用户所能操作的菜单;对于以某个级别的用户,当其使用帐号
或别的标志符进入系统,你就调用相应的函数来确定菜单的可见性。
 
设置名为N11的子菜单项
(FindComponent('N11') AS TMENUITEM).enabled:=false;
 
使用菜单的TAG来进行判断,不同权限的tag数值不同。
然后遍历所有的MenuItem,进行设置就OK了
 
权限用一个长字符串来做,如(111111111111111111111111111111111111111111111111)
带表所有四十个权限,
{private
aMenu :array[1..40] of TMenuItem ;}
OnCreate 事件里
{
aMenu[0] :=N1;
aMenu[1] :=N2;
.......}
var s :String;
i :Integer;
beign

s :=FieldByName('fieldname').AsString;
for x:=1 to 40 do
aMenu[x].Visible(or Enabled) :=s[1]='1';
end;
照你的意思做的,应该能看明白吧。
 
bigroute:
和我想法差不多,,呵呵,我在想他为什么要提出不用if...else 和case of ?没有
这个必要吧,?我想他是想省却判断所花销的时间,而直接用权限对应来作!
 
谢谢HeyTommy,QuickSilver,yzhshi,bigroute。
你们的说法,都有启示;QuickSilver的方法,解决了我全部困难;yzhshi和bigroute给我提供了其他的思路,谢谢各位,
可惜只有50分,下次一定多给点分。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
628
import
I
后退
顶部