我想把MDI的子窗口的name值存到数据库里面,然后再在程序里面取出来打开相应的窗口~
这是我打开MDI子窗口的代码:procedure tform17.OpenA(sender:TObject);
begin
    if not Assigned(Form1)   then //判断子窗体是否已打开
   begin
   Form1:=TForm1.Create(Self);
   Form1.Show;
   end
   else Form1.BringToFront;
end;麻烦帮我改改,主要是form1和字符串怎么匹配~谢谢了

解决方案 »

  1.   

    GetClass,根据名字找到窗体类
      

  2.   

    首先,在每个MDI窗体单元最下面添加如下语句来注册窗体类(假设类名为TForm1)。
    initialization
      RegisterClass(TForm1);end.然后,在需要根据窗体类名创建窗体的地方做如下操作。
    var
      FClass: TPersistentClass;
      FForm : TForm;
    begin
      FClass := FindClass('TForm1');
      if Assigned(FClass) then
      begin
        FForm := TFormClass(FClass).Create(Self);
        //……你可以随便处理这个根据类名创建出来的窗体。
      end
      else
        ShowMessage('类TForm1未注册!');
    end;大概就是这个样子了。
      

  3.   


    首先定义一个函数
    procedure TForm1.MyMenuItemClick(Sender: TObject);
    var
      FClass: TPersistentClass;
      FForm : TForm;
    begin
      FClass := FindClass((Sender as TMenuItem).Hint);
      if Assigned(FClass) then
      begin
        FForm := TFormClass(FClass).Create(Self);
        //……你可以随便处理这个根据类名创建出来的窗体。
      end
      else
        ShowMessage('类TForm1未注册!');
    end;
    然后你在动态创建菜单项的地方,把这个类名(例如:TMyForm1)传递给这个菜单项的Hint属性。
    var
      FItem: TMenuItem;
    begin
      FItem := TMenuItem.Create(MainMenu1);
      FItem.Caption := '测试';
      FItem.Hint    := 'TMyForm1';
      //……
      FItem.OnClick := MyMenuItemClick;
      MainMenu1.Items.Add(FItem);
    end;
    如果,这样你还无法理解的话,我真的就无话可说了……
      

  4.   

    上面的楼主差不多都讲到了。你这样做是按类名动态创建。
    首先 RegisterClass(); 定义类名。
    然后按照 反射模式创建即可。
    至于反射怎么写, 网上搜下一大堆
      

  5.   

    gobiz太谢谢你了!解决了我这个纠结了一天的问题,拯救了我好多脑细胞啊!谢谢了!