您的位置:程序门 -> delphi -> vcl组件开发及应用



delphi动态生成菜单--急切等待。我昨晚基本没睡也没弄好。


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


delphi动态生成菜单--急切等待。我昨晚基本没睡也没弄好。[已结贴,结贴人:louchanghong]
发表于:2007-01-20 11:23:30 楼主
00                                    
0000                                
000000                            
000001                            
0001                                
000100                            
000101                            
0002                                
000200                            
0003                                
000300                            
000301                            
0004                                
000400                            
0005                                
000500                            
菜单表中的id字段如上面的值,谁能给出个按上面这个内容动态生成相应菜单项的例子啊。菜单的级数与子菜单个数可能不确定,需要从数据库中读出来。最好是把从数据库中读取,与生成菜单的语句都贴出来。
发表于:2007-01-20 11:35:461楼 得分:0
没有人???自己先顶。
发表于:2007-01-20 11:51:122楼 得分:0
虾米意思?

00                                    
    +00                                
        00                            
        01                            
    +01                                
        00                            
        01
...
这样的菜单?
发表于:2007-01-20 13:04:423楼 得分:0
是的。
发表于:2007-01-20 13:17:034楼 得分:20
1、构建一个根节点
2、读出一个菜单节点,去掉最后一个字符
3、在根节点中搜索去掉字符后的值是否存在
4、如果存在,则将该节点挂在找到的节点上,跳到2
5、如果不存在,去掉后面一个字符,如果剩下的字符不为空则跳到3,否则向下
6、将该节点挂在根节点

当然,如果每一级使用的数据长度都为2的话,就更容易了,取前两个字符,在第一级中搜索值为着两个字符的节点,缓存。再取两个字符,在缓存那个节点下搜索,缓存...直到最后两个字符被取出,则挂在缓存节点下。
发表于:2007-01-20 13:19:395楼 得分:0
to   zhmnsw(糖醋鼻子)  
我是刚接触这种树的东西。你要是有现成的例子,给发一个学习中。
发表于:2007-01-20 13:25:326楼 得分:0
那你好好看看算法基础吧
不要忘了delphi不是拖控件
你可以看我的blog上那篇文章
找准自己的位置比较好
http://blog.csdn.net/zhmnsw/archive/2007/01/20/1488179.aspx
发表于:2007-01-20 13:40:577楼 得分:0
生成菜单?
tmenuitem.create
发表于:2007-01-20 13:59:088楼 得分:0
用递归从表里获取菜单项来创建菜单,如果需要偶把代码贴给你!
发表于:2007-01-20 14:03:469楼 得分:0
to   newfang(传说中的mic)  
  太感激了。救星来了。代码贴出来吧。等着呢
发表于:2007-01-20 15:33:2310楼 得分:0
-_#!
发表于:2007-01-20 15:57:1611楼 得分:80
procedure   tform1.button1click(sender:   tobject);
var
    vrootitem:   tmenuitem;

    function   findmenuitem(aid:   string):   tmenuitem;
    var
        i:   integer;
        vparentitem:   tmenuitem;
    begin
        result   :=   nil;
        if   aid   =   ' '   then   exit;
        for   i   :=   0   to   mainmenu1.componentcount   -   1   do
            if   mainmenu1.components[i]   is   tmenuitem   then
            begin
                if   sametext(striphotkey(tmenuitem(mainmenu1.components[i]).caption),
                    aid)   then
                begin
                    result   :=   tmenuitem(mainmenu1.components[i]);
                    exit;
                end;
            end;
        result   :=   tmenuitem.create(mainmenu1);
        result.caption   :=   aid;
        //result.onclick   :=   menuitemclick;
        vparentitem   :=   findmenuitem(copy(aid,   1,   length(aid)   -   2));
        if   assigned(vparentitem)   then
            vparentitem.add(result)
        else   vrootitem.add(result);
    end;
var
    s:   string;
begin
    vrootitem   :=   mainmenu1.items;

    adotable1.open;
    while   not   adotable1.eof   do
    begin
        s   :=   adotable1.fieldbyname( 'field1 ').asstring;
        findmenuitem(s);
        adotable1.next;
    end;
end;
发表于:2007-01-20 17:03:0512楼 得分:0
fei   chang   gan   xie   .xian   yan   jiu   yi   xia
发表于:2007-01-20 17:21:2413楼 得分:0
嘿嘿~拌水已经写出来了   ~
发表于:2007-01-21 07:03:0414楼 得分:0
和我有同样问题的也看看吧。尽管
我还没看完。


快速检索

最新资讯
热门点击