delphi中如何遍历mainmenu然后显示在treeview中(100)

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

zhk7324385

Unregistered / Unconfirmed
GUEST, unregistred user!
如mainmenu中是 aa bb cc dda1 b1 c1a2 b2-a3treeview中为-aa a1 a2 - a3+bbccdd
 
哥们,你现在的问题是不知道怎么读还是不知道怎么写呀先给你来段读取mainmenu的吧// tv1: TTreeView;var i,j:integer;begin ShowMessage(IntToStr(mm1.Items.Count)); for i:=0 to mm1.Items.Count-1 do begin ShowMessage(mm1.Items.Caption); for j:= 0 to mm1.Items.Count-1 do begin ShowMessage(mm1.Items[j].Caption); end; end;end;
 
for i:=1 to fmmain.MainMenu1.Items.Count-1 do begin // 主 1 it:=fmmain.MainMenu1.Items.Items; advs1.Cells[i-1,0]:=it.Caption; i1:=1; for j:=0 to it.Count-1 do begin //fu1 it1:= it.Items[j]; act1:=taction(it1.action); if it1.Action<> nil then begin if it1.Enabled then begin advs1.Cells[i-1,i1]:=act1.Caption; advs1.Objects[i-1,i1]:=it1; i1:=i1+1; end; end else begin for l:=0 to it1.Count-1 do begin it2:= it1.Items[l]; act1:=taction(it2.action); if (it2.Action<> nil) and it2.Enabled then begin advs1.Cells[i-1,i1]:=copy(it1.Caption,7,4)+':'+act1.Caption; advs1.Objects[i-1,i1]:=it2; i1:=i1+1; end; end; end; if i1>k then k:=i1; if i=1 then j1:=i1; end; //fu1 end ; //zhu 1
 
我是从我的程序扣出部分来的 具体思路你可作参考!
 
里面好多参数啊,能把 var ...;给写出来吗?还有taction();是自己写的方法吗?新手不懂,劳烦了
 
我是这么写的,但是结果不太对,所有的字节点都跑到aa下了var node:ttreenode; s:string; i,m:integer;begin TreeView1.Items.Clear; //加入权限列表 i:=0 ; while i<=mm1.Items.Count-1 do begin treeview1.items.Add(nil,mm1.items.Caption); //node:=treeview1.Items.Item; node:=treeview1.Items.GetFirstNode; // node:=treeview1. m:=0 ; while m<=mm1.Items.Items.Count-1 do begin if (Form1.mm1.Items.Items.Items[m].Caption<>'-') and (Form1.mm1.Items.Items.Items[m].Visible ) then TreeView1.Items.AddChild(node,mm1.items.Items[m].Caption); m:=m+1 end; i:=i+1;end;
 
因为菜单可以有子菜单,菜单的子菜单又可以有子菜单,所以这个问题要用递规来处理。procedure CreateTVNodeByMenu(AMenu:TMainMenu;ATV:TTreeView);var i:Integer; procedure AddNodeByMenu(AMItem:TMenuItem;ATV:TTreeView;APNode:TTreeNode); var j:Integer; PNode:TTreeNode; AM:TMenuItem; begin if AMItem.Count=0 then //该菜单项无子菜单 begin ATV.Items.AddChild(APNode,AMItem.Caption); end else begin //有子菜单,需要递规处理 PNode:=ATV.Items.AddChild(APNode,AMItem.Caption); for j:=0 to AMItem.Count-1 do begin AM:=AMItem.Items[j]; AddNodeByMenu(AM,ATV,PNode); end; end; end;begin ATV.Items.Clear; for i:=0 to AMenu.Items.Count-1 do AddNodeByMenu(AMenu.Items,ATV,nil);end;//函数调用CreateTVNodeByMenu(MainMenu1,TreeView1);
 
果然是高手啊,谢谢了!分给你了,哈哈哈
 

Similar threads

回复
0
查看
804
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部