如题,该如何实现,敬请赐教

解决方案 »

  1.   

    如果你窗口不是很多,可用下面的笨方法(现在我能想到的)
    1.从数据库取form的名字(这个我就不说了)
    2.将所有窗口设成非自动非auto-create(项目选项中有)
    3.主form包含所有的窗口(用uses unit2,unit3,...)
    4.生成的所有窗口:
       form2:=tform2.Create(nil);
       form3:=tform3.Create(nil);
      ...
    5.判断并执行:
       s为窗口名
       if form2.Name=s then
         form2.ShowModal;
       if form3.Name=s then
          form3.ShowModal;
       ...
    6.释放所有窗口:
       form2.Free;
       form3.Free;
    ...
      

  2.   

    想了一下,如果你的窗口已经全部建立(或全是auto-create的),可以这样
    var
          f:TComponent;
          i:integer;
    ...
          for   i:=0   to   Screen.FormCount-1   do
          begin
              f  :=screen.Forms[i];
              if f.Name=s then
               (f as Tform).ShowModal;
      

  3.   

    编译前需要把所有可能涉及的form通过一个结构数组把form类型和名字(字符串)关联起来,然后由此查找该使用的form类型。。如果是外部的dfm文件里定义的form,也是可以,只是会复杂很多:
    http://blog.csdn.net/sz_haitao/archive/2009/05/15/4190602.aspx
      

  4.   


    //-------------------------------------------
    //平台:WINXP+DELPHI7
    //作者:dinoalex(Tak Kwan)
    //日期:2009年8月
    //-------------------------------------------procedure TMainFrm.Button3Click(Sender: TObject);
    var
      AFormClass:TComponentClass;
      AForm: TForm;
      str: string;
    begin
      str:= 'MyFrm' ;                                     // 权当数据库里的字符
      AFormClass := TComponentClass(GetClass('T'+str));   // 即 TMyFrm
      if AFormClass <> nil then
      begin
        Application.CreateForm(AFormClass,AForm);
        AForm.Show;
      end;                  
    end;initialization
      RegisterClass(TMyFrm);  // 注册
      

  5.   

    我觉得dinoalex的解决办法最好,同时也谢谢大家的关注,谢谢!