请问如何遍历菜单?(50分)

  • 主题发起人 主题发起人 oldnew
  • 开始时间 开始时间
O

oldnew

Unregistered / Unconfirmed
GUEST, unregistred user!
已经在MainMenu1中建立好各种菜单
如何用程序来遍历所有菜单啊?

比如我要在所有的菜单中动态地加上某些字,
这就需要遍历所有菜单
 
这是我一个用户管理控件的部份代码:
procedure TUser.CollectMenuItem(item: TMenuItem;var Count: Integer);
var I : integer;
strCaption : String;
begin
for I := 0 to Item.Count -1 do
begin
if Item.Items.Caption <> '-' then
begin
Inc(Count);
strCaption := Item.Items.Caption;
if pos(' ',strCaption) > 0 then
strCaption := Copy(strCaption,1,Pos(' ',strCaption) -1);
end;
end;
 
[blue]数据库中存放有各个菜单的可视性参数

如何在程序启动时去加载各个菜单的可视性?[/blue][8D][:(]
 
遍历的时候根据将每个菜单项的Visible置为相应的值就可以了。
 
菜单的可视性参数肯定和菜单一一对应。
你将菜单的可视性参数用SQL取出,然后赋给菜单不就成了吗?
 
这样行不行?
for i:=0 to ComponentCount-1 do
begin
if(Components is TMenuItem) then
begin
qryGetMenuVisible.First; //查询到的菜单数据集
while not qryGetMenuVisible.eof do
begin
if(qryGetMenuVisible.FieldByName('MenuName').AsString=(components as TMenuItem).Name) then
begin
if(qryGetMenuVisible.FieldByName('Visible').AsString='可见') then
(Components as TMenuItem).Visible:=true
else
(Components as TMenuItem).Visible:=false;
end;
qryGetMenuVisible.Next;
end;
end;
end;
 
WebExplorer的方法中Components是Form吗?
碰到窗体上还有Popmenu咋办?
其实mainmenu象一棵树,最好用递归遍历。
 
To Gmxyb:
仔细看看在PopupMenu中的项也是TMenuItem类型,在MainMenu中的项也是TMenuItem类型
 
多人接受答案了。
 
后退
顶部