var
  MenuCaption : string;
begin
  if sender is TMenuItem then begin
     MenuCaption := TMenuItem(Sender).caption;
     //在这里MenuCaption 应该是你要的值,你根据这个值再到库里查出FORM就可以处理了。
  end;
end;还有一点就是在程序建立时把每个菜单的事件都指向这个程序。

解决方案 »

  1.   

    思路:菜单设计期设计,Visible为False,读取数据库信息,如果fMenuName的值与菜单的Items[i]的Caption匹配,则Visible为True,菜单的Items[i]Click
      

  2.   

    var
      gItem: TMenuItem;
    ......
    begin
            for i:=Low(NODELEVELTWO) to High(NODELEVELTWO)do
            begin
              gItem:=TMenuItem.Create(Self);
              gItem.Caption:=NODELEVELTWO[i]+'[&'+Chr(Ord('A')+i)+']';
              gItem.ImageIndex:=33;
              gItem.Tag:=i;
              gItem.Hint:=IntToStr(i);
              gItem.OnClick:=OnMenuClick;
              MMRefrence.Add(gItem);
            end;
    .....
    end;procedure TManProForm.OnMenuClick(Sender: TObject);
    begin
      ShowDocument((Sender as TMenuItem).Tag);
    end;
      

  3.   

    其实楼主的设计思路是很好的,该系统有可能在以后还会增加功能模块,对于菜单而言,是动态的,只要改变数据记录变可以了。你先对一个菜单项的CLOCK事件编程,内容是我上面写的。
    然后在建立菜单时菜每个MenuItem的ONCLICK事件都指向这个程序。b1.OnClick := a1Click;在这里a1Click是菜单a1的事件,b1新建的菜单。
      

  4.   

    奇怪,Delphi语言可以支持根据字符串(窗口名称存放在数据库的字段中),打开相应的窗口实体吗(除去使用Case语句)?
      

  5.   

    各位老大,我想的菜单功能是要把FORM SHOW出来.但是,在数据库里找到的是FORM的名字是一个字符串啊.怎么对它进行操作呢?就是在ONCLICK的事件中写什么代码呢?
      

  6.   

    看来你的设计和我的想法还是有差距的。
    我认为:
    1、主程序应该是很小的,它的功能只是负责菜单的建立和显示,以及取得用户选择的功能然后查询出对应的FORM名称。
    2、其他的所有子功能FORM应该在对应的DLL中,而在每个DLL中都有一个显示该DLL中的所有FORM的过程。如果不是这样的话,你每增加一个FORM你的主程序就要重新编译,因为如果该FORM的单元没有被USE,那你的主程序是无法SHOW出其他的FORM的。
    3、所以你的数据库应该还有一个字段是存储该FORM存在于哪个DLL中。
    4、在主程序中只要将FORM的名字(字符串)传给该DLL的显示程序,让该DLL的显示子程序将真正的FORM SHOW出来。
    5、只有这样处理才可能解决你的问题。
      

  7.   

    发了三个同样的问题,是因为发贴的时候IE出错了.方便管理先结了这个吧.请各位到另外的那个问题中去.再发一些问题.谢谢了.mrzho(mrzhou).谢谢你的提议.我现在还在设计中.你能不能把你的想法,在具体化一下.给点源代码吧.贴上或给我EMAIL: [email protected]
    谢谢了.