简单的一个~~~~帮帮偶~~关于菜单的问题

mdejtod 2006-05-17 02:43:35
我想让程序历遍所有的菜单项~~~要怎么写?就是mainmenu1.items.items[i].name=''可是这样程序只会循环主菜单,而不循环子菜单~~怎么回事?
...全文
231 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
reborter 2006-05-19
  • 打赏
  • 举报
回复
收藏
mdejtod 2006-05-18
  • 打赏
  • 举报
回复
谢谢楼上的大哥了~问题解决了~是那个
if adoquery1.FieldByName('Examine_cadre').AsString='0' 的原因,因为表中该字段是boolean
类型的,改成.asboolean就可以判断了~~~
famer 2006-05-18
  • 打赏
  • 举报
回复
while not adoquery1.Eof do
begin
mode_id:=trim(adoquery1.FieldByName('mode_id').AsString);
for i:=0 to MainMenu1.Items.Count-1 do
begin
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
if mainmenu1.Items[i].Items[j].Name=mode_id then
begin
if adoquery1.FieldByName('Examine_cadre').AsString='0' then
MainMenu1.Items[i].Items [j].Enabled:=False
end;
end;
end;
ADOQuery1.Next;
end;
end;
mdejtod 2006-05-17
  • 打赏
  • 举报
回复
可是~我的程序就上面那些呀好像那个值都不会变一样,不懂哪里出错了~帮我看看行不?谢谢你了^_^~我是新手哦~
famer 2006-05-17
  • 打赏
  • 举报
回复
你好好检查一下你的判断是不是正确
mdejtod 2006-05-17
  • 打赏
  • 举报
回复
嗯~~不会死循环了~~可是怎么没有一点效果??当前记录中就有一个菜单是没有权限的,可是还是为true 可显示的
famer 2006-05-17
  • 打赏
  • 举报
回复
你检查一下你的
adoquery1.Next;
位置写对没有。写成这样
while not adoquery1.Eof do
begin
mode_id:=trim(adoquery1.FieldByName('mode_id').AsString);
for i:=0 to MainMenu1.Items.Count-1 do
begin
MainMenu1.Items[i].Enabled:=False;
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
if mainmenu1.Items[i].Items[j].Name=mode_id then
begin
if adoquery1.FieldByName('Examine_cadre').AsString='0' then
MainMenu1.Items[i].Items [j].Enabled:=False
else
MainMenu1.Items[i].Items [j].Enabled:=true;
end;
end;
end;
ADOQuery1.Next;
end;
end;
mdejtod 2006-05-17
  • 打赏
  • 举报
回复
竟然是个死循环~~~~不知道怎么回事~~去掉了也一样
famer 2006-05-17
  • 打赏
  • 举报
回复
MainMenu1.Items[i].Enabled:=False;
你把这句去掉试试
mdejtod 2006-05-17
  • 打赏
  • 举报
回复
嗯~~但是我不要先将所有的菜单都设为false 因为只有少数的菜单有权限限制.在表中也没有存放所有的菜单名称.可不可以先进行判断菜单是否等于当前记录中的菜单名称,然后再跟进权限字段进行决定是否要显示,以下是我改过后的代码,可是不知怎么回事那个菜单一直不会变,即J的值不会变:
while not adoquery1.Eof do
begin
mode_id:=trim(adoquery1.FieldByName('mode_id').AsString);
for i:=0 to MainMenu1.Items.Count-1 do
begin
MainMenu1.Items[i].Enabled:=False;
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
if mainmenu1.Items[i].Items[j].Name=mode_id then
begin
if adoquery1.FieldByName('Examine_cadre').AsString='0' then
MainMenu1.Items[i].Items [j].Enabled:=False
else
MainMenu1.Items[i].Items [j].Enabled:=true;
end;
end;
end;
end;
adoquery1.Next;
end;
famer 2006-05-17
  • 打赏
  • 举报
回复
先把所有的菜单Enabled设为false

for i:=0 to MainMenu1.Items.Count-1 do
begin
MainMenu1.Items[i].Enabled:=False;
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
MainMenu1.Items[i].Items [j].Enabled:=False;
end;
end;


把菜单名和数据库里存的对比,有的就设Enabled为True
ADQ.open
while not ADQ.Eof do
begin
tagz:=ADQ.FieldByName('FunctionNo').AsString ;
for i:=0 to MainMenu1.Items.Count-1 do
begin
if MainMenu1.Items[i].name=tagz then
MainMenu1.Items[i].Enabled:=True;
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
if MainMenu1.Items[i].Items [j].name =tagz then
MainMenu1.Items[i].Items [j].Enabled:=True;
end;
end;
ADQ.Next;
end;
mdejtod 2006-05-17
  • 打赏
  • 举报
回复
对呀,我就是要取得这条记录中的菜单名称,然后再进行判断,比如说记录中的mode_id='N18' ,这条记录的权限为false,那我就要将这个菜单(N18)设为false,要怎么实现?
famer 2006-05-17
  • 打赏
  • 举报
回复
mode_id:=trim(adoquery1.FieldByName('mode_id').AsString);
是不是和菜单名完全一样哦,如果一样的话,应该全部都为不可能
mdejtod 2006-05-17
  • 打赏
  • 举报
回复
不是有错~运行起来所有的菜单都为不可用状态,不知道怎么回事,如果将
MainMenu1.Items[i].Enabled:=true;去掉则该程序不起作用
famer 2006-05-17
  • 打赏
  • 举报
回复
报什么错?
mdejtod 2006-05-17
  • 打赏
  • 举报
回复
楼上的大哥~好像我的程序有错帮我看看行不?
adoquery1.Close;
ADOQuery1.Parameters.ParamByName('user_name').Value:=user_name;
adoquery1.Open;
while not adoquery1.Eof do
begin
mode_id:=trim(adoquery1.FieldByName('mode_id').AsString);
if adoquery1.FieldByName('Examine_cadre').AsString='0' then //权限判断
begin
for i:=0 to MainMenu1.Items.Count-1 do
begin
MainMenu1.Items[i].Enabled:=true;
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
if mainmenu1.items[i].items[j].name=mode_id then
MainMenu1.Items[i].Items [j].Enabled:=False;
end;
end;
end
else
begin
for i:=0 to MainMenu1.Items.Count-1 do
begin
MainMenu1.Items[i].Enabled:=true;
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
if mainmenu1.items[i].items[j].name=mode_id then
MainMenu1.Items[i].Items [j].Enabled:=False;
end;
end;
end;
end;
adoquery1.Next;
end;
mdejtod 2006-05-17
  • 打赏
  • 举报
回复
要用两个循环?我试试看~谢谢楼上的~~呵~
famer 2006-05-17
  • 打赏
  • 举报
回复
用递归方法
famer 2006-05-17
  • 打赏
  • 举报
回复
for i:=0 to MainMenu1.Items.Count-1 do
begin
MainMenu1.Items[i].Enabled:=False;
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
//ShowMessage(MainMenu1.Items[i].Items[j].Caption+','+IntToStr(MainMenu1.Items[i].Items [j].Tag ) );
MainMenu1.Items[i].Items [j].Enabled:=False;
end;
end;


for i:=0 to MainMenu1.Items.Count-1 do
begin
if MainMenu1.Items[i].Tag=tagz then//判断是否具有使用权限-----
MainMenu1.Items[i].Enabled:=True;
for j:=0 to MainMenu1.Items[i].Count-1 do
begin
//ShowMessage(MainMenu1.Items[i].Items[j].Caption+','+IntToStr(MainMenu1.Items[i].Items [j].Tag ) );
if MainMenu1.Items[i].Items [j].Tag =tagz then
MainMenu1.Items[i].Items [j].Enabled:=True;
end;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧