我将程序中用到的窗体名称都保存在数据库中,但在程序中如何根据名称打开指定的窗体,小弟困惑,各位大虾多教教我。

解决方案 »

  1.   

    RegisterClass需要在initliza里注册。
      

  2.   

    小弟初学DELPHI,楼上能否详细点,先谢过
      

  3.   

    unit Main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      sClass: String;
      ss: TPersistentClass;
      dd: TForm;
    begin
      sClass := Edit1.Text;
      ss := GetClass(sClass);
      if ss = nil then Exit;
      dd := TFormClass(ss).Create(Application);
      dd.Left := 0;
      dd.Top := 0;
      dd.ShowModal;
    end;initialization
      RegisterClasses([TForm1]);end.
      

  4.   

    楼上兄弟谢谢了,我试了一下,如果窗体已经打开了的就行,
    但我的情况有点不同,举个例子
    我新建了一个应用,有两个FORM,分别为FrmMain(mdiform)和Frmchild(mdichild),
    程序启动时只自动创建了FrmMain
    现在一菜单(动态生成的)的CLICK事件中完成打开Frmchild的动作,
    mouldname :stringmouldname = 'FrmChild'
    以下如何处理.....
      

  5.   

    一样的处理啊,你在child里注册。
    在mdiform里寻找和打开就可以了!
    我只是把代码压缩了放到一个单元里而已!
      

  6.   

    你自己可以在我那测试程序里多加几个窗体,并且把类都注册了。
    在你edit里输入相应的名字,就可以创建相应的form了
      

  7.   

    我试了一下,还是一样,假若FROM已经打开了,就可创建一个副本,即同样的窗体再打开一个,但FROM没打开的,就没反应了