var
MenuCaption : string;
begin
if sender is TMenuItem then begin
MenuCaption := TMenuItem(Sender).caption;
//在这里MenuCaption 应该是你要的值,你根据这个值再到库里查出FORM就可以处理了。
end;
end;还有一点就是在程序建立时把每个菜单的事件都指向这个程序。
MenuCaption : string;
begin
if sender is TMenuItem then begin
MenuCaption := TMenuItem(Sender).caption;
//在这里MenuCaption 应该是你要的值,你根据这个值再到库里查出FORM就可以处理了。
end;
end;还有一点就是在程序建立时把每个菜单的事件都指向这个程序。
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;
然后在建立菜单时菜每个MenuItem的ONCLICK事件都指向这个程序。b1.OnClick := a1Click;在这里a1Click是菜单a1的事件,b1新建的菜单。
我认为:
1、主程序应该是很小的,它的功能只是负责菜单的建立和显示,以及取得用户选择的功能然后查询出对应的FORM名称。
2、其他的所有子功能FORM应该在对应的DLL中,而在每个DLL中都有一个显示该DLL中的所有FORM的过程。如果不是这样的话,你每增加一个FORM你的主程序就要重新编译,因为如果该FORM的单元没有被USE,那你的主程序是无法SHOW出其他的FORM的。
3、所以你的数据库应该还有一个字段是存储该FORM存在于哪个DLL中。
4、在主程序中只要将FORM的名字(字符串)传给该DLL的显示程序,让该DLL的显示子程序将真正的FORM SHOW出来。
5、只有这样处理才可能解决你的问题。
谢谢了.