将treeview转化为菜单

yanleigis 2001-04-22 09:53:00
将一个treeview的结构转化为菜单方式
...全文
143 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanleigis 2001-04-25
  • 打赏
  • 举报
回复
WuHeHai(河海),wanwangzhiwang(万王之王) 谢谢你们,但我刚来不知如何给分
yanleigis 2001-04-25
  • 打赏
  • 举报
回复
哈哈wanwangzhiwang(万王之王) 你的程序必须有一个菜单项,且不能有三级以下菜单
WuHeHai(河海)是正确的,只需改i:=0;
SetLength(MainMenus, I+1);
yanleigis 2001-04-25
  • 打赏
  • 举报
回复
我试一下,另我刚来,如何给分
wanwangzhiwang 2001-04-24
  • 打赏
  • 举报
回复
搞定,不需要递归!把treeview1的节点加到MainMenu1的file菜单下:
procedure TForm1.Button1Click(Sender: TObject);
var
NewItem,PItem: TMenuItem;
I ,j,k,h: integer;
str:string;
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption :=treeview1.items[0].Text;
MainMenu1.Items[0].Add(Newitem);
for i:=1 to treeview1.items.Count-1 do
begin
NewItem := TMenuItem.Create(Self);
NewItem.Caption :=treeview1.items[i].Text;
if treeview1.Items[i].Parent=nil then
MainMenu1.Items[0].Add(Newitem)
else
begin
with MainMenu1 do
for j:=0 to Items[0].Count-1 do
begin
str:=Items[0].items[j].Caption;
if pos('&',Items[0].items[j].Caption)>0 then
begin
str:=stringreplace(str,'&','',[rfReplaceAll,rfIgnoreCase]);
k:=pos('(',str)-1;
if k>0 then
str:=copy(str,1,k);
end;
if str=treeview1.items[i].Parent.Text then
begin
Items[0].items[j].Add(Newitem);
break;
end;
end;
end;
end;
end;
请给分!谢谢!
WuHeHai 2001-04-23
  • 打赏
  • 举报
回复
//通过TreeView1建立菜单MainMenu1

procedure TForm1.Button1Click(Sender: TObject);
var
CurNode: TTreeNode;
MainMenus: Array of TMenuItem;
I: Integer;
begin
I := 1;
CurNode:=TreeView1.Items[0];
Repeat
SetLength(MainMenus, I);
MainMenus[I] := TMenuItem.Create(Self);
MainMenus[I].Caption := CurNode.Text;
MainMenu1.Items.Add(MainMenus[I]);
if CurNode.HasChildren then
SearchTreeView(CurNode, MainMenus[I]);
Inc(I);
CurNode := CurNode.getNextSibling;
Until CurNode=nil;
end;

procedure TForm1.SearchTreeView(FirstNode:TTreeNode; AMenu: TMenuItem);
var
i,j:integer;
TempMenu: TMenuItem;
begin
if FirstNode.Count<>0 then
for i:=0 to FirstNode.Count -1 do
begin
TempMenu := TMenuItem.Create(Self);
TempMenu.Caption := FirstNode.Item[i].Text;
AMenu.Add(TempMenu);
if FirstNode.HasChildren then
SearchTreeView(FirstNode.Item[i], TempMenu);
end;
end;
wanwangzhiwang 2001-04-23
  • 打赏
  • 举报
回复
是不是真的?不要后悔啊!
王集鹄 2001-04-23
  • 打赏
  • 举报
回复
关注
yanleigis 2001-04-23
  • 打赏
  • 举报
回复
200分
lt2000 2001-04-23
  • 打赏
  • 举报
回复
对,就是用递引,源程我可以提供。
wanwangzhiwang 2001-04-22
  • 打赏
  • 举报
回复
可以用一个递归完成!你可以给我多少分啊?
yanleigis 2001-04-22
  • 打赏
  • 举报
回复
分好说
wanwangzhiwang 2001-04-22
  • 打赏
  • 举报
回复
这是个大问题,你这么点分就想解决?
yanleigis 2001-04-22
  • 打赏
  • 举报
回复
如何做,原程序
yanleigis 2001-04-22
  • 打赏
  • 举报
回复
如何做,原程序
wanwangzhiwang 2001-04-22
  • 打赏
  • 举报
回复
可以!

5,388

社区成员

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

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