同上。

解决方案 »

  1.   

    var
      MyForm: TForm;
      s: String;
    begin
      s:= 'Form2'; //从数据库取出窗体名,如: s:= ADODataSet.FieldValue['窗体'];
      MyForm:= TForm.Create(self);
      MyForm.Name:= s;
      MyForm.ShowModal;
    end;
      

  2.   

    如果窗体已经创建完了,可以用下面的方法:
    glCurrentFormName字符型,表示当前窗体的名称
    Tform(application.FindComponent(glCurrentFormName)).ShowModal;
      

  3.   

    是不是根据数据库里面存储的窗体类名,在程序中创建该窗体类呢?
    感觉上就是根据一个字符串值,创建一个类名等于该字符串的类。
    我不知道怎么实现。因为不同的窗体应该具有不同的数据结构,感觉上像是不大可能实现,请高手指教。
    我的想法是:
    如果要创建的窗体具有相同的结构,只不过属性不同的话,实现比较容易。
    只要把窗体的属性保存在数据库,然后创建该结构窗体,然后根据数据库内容对窗体进行赋值就可以了。
    如果过程和函数具有相同的参数而实现方式不同,可以在数据库中保存相应实现的dll文件,然后根据数据库内容拷贝相应的文件。
      

  4.   

    先将名字从数据库中提出来,会吧!然后,看:http://expert.csdn.net/Expert/topic/1869/1869918.xml?temp=.2338831
      

  5.   

    笨办法
      if data.ads_common.fieldbyname('tableform').asstring='frmbase_xzgb' then
        openform(Tform(frmbase_xzgb),Tfrmbase_xzgb,self);
      

  6.   

    哎,我觉得楼主的想法只是让各窗体的caption属性显示的值是数据库中的值所以,楼主可以先把数据库中的值取出来,然后再用:TFrom(findcomponent('formname')).caption:=数据库中的值
    就可以了~如果说你的窗体整个都是根据数据库中项目的个数来自动创建的那么你就可以把没个窗体的name属性都设置成你数据库中的值了假设你把所有的数据库值都保存在一个数组nameArray[1..10]里面了
    你就可以在主窗口的show事件里面动态的创建你所要的窗口了~var myForm:tform;for i:=1 to high(nameArray) do
      begin
       myForm:=tForm.create(self);
       myForm.name:=nameArray[i];
       myForm.caption:=nameArray[i];
       .......//设置其他属性
       myForm.show;//我不建议使用showmodel,具体原因可以查一下delphi的help
      end;
      

  7.   

    首先,在主Form的create事件里:
      registerclasses([TForm1],[TForm2],...,[TFormn]);
    然后,读出数据库中的类名classname
    最后:
    var
      myClass:TForm;
    begin
      myClass:=TFormClass(getclass(classname)).create(self);
      myClass.show;
    end;
      

  8.   

    谢谢大家。
     我是这个意思:
     给窗体的名字来打开指定的窗体?
     如数据库有下面的表:
      formname  re(字段名)
       jhd      进货单
       xsd      销售蛋
       .          .另外加100分。
      

  9.   

    if Application.FindComponent(formname) = nil then
    begin
      tmpForm := TForm.Create(Application) ;
      tmpForm.Name := formname;
      ...
    end
    else
      TForm(Application.FindComponent(formname)).BringToFront ;
    楼上的老兄都说了。快结贴吧。
      

  10.   

    完整例子unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Controls, StdCtrls,Forms;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      public
        procedure CreateSubForm(AClassName:string);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      CreateSubForm('TForm1');
    end;
    procedure TForm1.CreateSubForm(AClassName: string);
    begin
      if GetClass(AClassName)<>nil then
        with TFormClass(FindClass(AClassName)).Create(self) do
        begin
          ShowModal;
        end;
    end;////下面的代码注册窗体类,你要注册才能用FindClass找到
    initialization
      RegisterClass(TForm1);end.
      

  11.   

    function GetForm(AFormName: string): TForm;
    var
      i: Integer;
      RetForm: TForm;
    begin
      Result := nil;
      try
        AFormName := LowerCase(AFormName);
        for i := 0 to Application.ComponentCount-1 do
          if Application.Components[i] is TForm then
          begin
            RetForm := TForm(Application.Components[i]);
            if LowerCase(RetForm.name) = AFormName then
            begin
              Result:= RetForm;
              Break;
            end;
          end;
      except
      end;
    end;这样你可以得到你的窗体名,然后就可以调用他了