各位大侠,现在我碰到一个问题,就是想利用dll在客户端动态的生成用户菜单,并且每项菜单的功能也想封装在dll里,但怎么传递给客户端,大家有没有好的实现方法,最好有可供参考的代码,谢了!在线等阿!
qq:5938099

解决方案 »

  1.   

    先把菜单和DLL里的功能(函数)对应起来
    数据库中建一权限表
    不同等级的用户安装不同数量的菜单项
      

  2.   

    能具体点吗,我建了权限表,可以通过判断用户得权限来动态显示菜单项,但怎么和dll的功能联起来,并且把它传到菜单里去阿?
      

  3.   

    表里面应该有每个菜单对应的MDIForm的名字这样不就可以调用了吗!
      

  4.   

    我想让form动态的产生,就时说在没有点击菜单项时并没有相关的form
      

  5.   

    你可以在主程序中动态生成菜单,把相应菜单对应的功能模块做成dll
    在pro_click中调用dll,给你一个例子参考:
    //////////////////////////////////////////////////////////
    //   动态生成菜单的过程                                 //
    //////////////////////////////////////////////////////////procedure Pro_CreateMenu;
    var
      MenuItem:TMenuItem;
    begin
      TMainMenu1.Items.Clear;
      query1.close;
      query1.SQL.clear;
      query1.sql.add(' select * from xt_gncd order by xmdh ');
      query1.Open;
      if not query1.IsEmpty then
      while not query1.Eof do
      begin
        MenuItem         :=TMenuItem.create(self);
        MenuItem.Name    :='m'+trim(query1.fieldbyname('xmdh').asstring);
        MenuItem.Caption :=    trim(query1.fieldbyname('xmmc').asstring);    //菜单的鼠标点击事件
        if query1.FieldByName('yjdbz').value=0 then // 叶接点标志=0为叶节点
        begin
          MenuItem.OnClick:=Pro_Click; //菜单的click 事件
        end;
        
        //由数据库动态生成菜单
        if query.FieldByName('fbdh').value=0  then // 父辈代号=0为根节点
          Form1.TMainMenu1.Items.add(MenuItem)
        else
          TMenuItem(form1.FindComponent('m'+trim(query1.fieldbyname('fbdh').asstring))).add(MenuItem);    query1.next;
      end;
      
    end;procedure Pro_Click;
    begin
      ShowMessage('鼠标点击事件');
    end;附加数据库表xt_gncd(功能菜单)的结构:
    create table xt_gncd(
    xmdh:char //项目代号--唯一标志
    xmmc:char //项目名称
    fbdh:char //父辈代号--唯一标志
    yjdbz:integer//叶接点标志XMDH XMMC          FBDH   YJDBZ
    100 文件(&F)         0        1
    101 新建             100      0
    103 打开             100      0200 编辑(&E)         0        1
    201 复制             200      0
    203 粘贴             200      0800 系统菜单(&S)     0        1
    801 操作设置         800      0
    803 口令修改         800      0
    805 参数设置         800      0
    807 信息设置         800      0900 帮助(&H)         0        1
    901 帮助主题         900      0
    903 关于             900      0
      

  6.   

    如何调用dll,请参考我回复过的帖子:
    http://expert.csdn.net/Expert/topic/1394/1394937.xml?temp=.220318