我的主界面有一个主菜单,mainmenu上面的项目都在主界面显示之前,从数据库的菜单表读出来的。我想做一个动态添加一个外部程序到主菜单的项目上的功能。也就是说,我可以选择磁盘上某个应用程序文件,然后指定在哪级菜单下添加项目。
以后我只要打开那个添加的菜单就可以打开相应的应用程序了。
要怎么做啊我看好些软件都这样子做了啊。这样子做的目的是为了在不改系统源代码的情况下,可以添加一些小功能。

解决方案 »

  1.   

    Add_Menu : 实现 将你选择程序的路径、菜单名称等信息写入表中。
    读取显示的时候动态指定这个新菜单的执行事件 比如执行 shellexecute
      

  2.   

    顶。。
    Add_Menu : 实现 将你选择程序的路径、菜单名称等信息写入表中。 
    读取显示的时候动态指定这个新菜单的执行事件 比如执行 shellexecute???????????????????
    主要是这个事件是不是要先在代码里写好,还是可以动态生成事件? 怎么样动态生成事件啊? 
      

  3.   

    你都把菜单生成了,添加一个菜单的事件!
    然后在事件中使用
    winExec或者shellExecute不就可以了吗
      

  4.   

    定义一个默认事件 procedure DefineMenuAction(Sender:Tobject);
    在DefineMenuAction中实现调用外部程序,用shellExecute
    然后绑定菜单事件 Menu1.onclick := DefineMenuAction;
      

  5.   

    procedure TForm1.DefaultAction(Sender: TObject);
    begin
      Winexec(Pchar(TMenuItem(Sender).Hint),1);
    end;procedure TForm1.N2Click(Sender: TObject);
    var
      AItem :TMenuItem;
    begin
      if OpenDialog1.Execute then
      begin
        AItem :=TMenuItem.Create(self);
        AItem.Caption :=ExtractFileName(OpenDialog1.FileName);
        AItem.Hint := OpenDialog1.FileName;// 外部程序路径存放在Hint里了,根据需要你可以写配置文件或数据库
        AItem.OnClick := DefaultAction;
        N3.Add(AItem);
      end;
    end;
    重新启动加载类似
      

  6.   

    14楼说得有道理,最好不要放在数据库中,因为不一定每个客户端的程序都会在相同的路径.
    你可以在16楼所说的添加后再写入ini文件,把路径保存起来,下一次再打开的时候就读取配置.
      

  7.   


    procedure TForm1.DefaultAction(Sender: TObject); 
    begin 
      Winexec(Pchar(TMenuItem(Sender).Hint),1); 
    end; procedure TForm1.N2Click(Sender: TObject); 
    var 
      AItem :TMenuItem; 
      ini:Tinifile;
    begin 
      if OpenDialog1.Execute then 
      begin 
        AItem :=TMenuItem.Create(self); 
        AItem.Caption :=ExtractFileName(OpenDialog1.FileName); 
        AItem.Hint := OpenDialog1.FileName;// 外部程序路径存放在Hint里了,根据需要你可以写配置文件或数据库 
        AItem.OnClick := DefaultAction; 
        N3.Add(AItem);
        ini:=Tinifile.Create(ExtractFilePath(Application.ExeName)+'Setup.ini');
        ini.writestring('setup','n3',OpenDialog1.FileName) ;
        ini.free;//这样就把配置保存起来了,下次再打开的时候再读取,再添加
      end; 
    end;