如何用字符串动态创建窗体
var
myform:tformclass;
aform:tform;
begin
myform:=TFormClass(TForm(Application.FindComponent('Form_Apply_Money_To_OA')));
aform:=TForm(myform);
aform:=myform.Create(nil);
try
aform.ShowModal;
finally
aform.Free;
end;
以上代码总是报错.....我想要实现的效果是用一个字符串动态地创建一个窗体,并把它showmodal出来.......
var
myform:tformclass;
aform:tform;
begin
myform:=TFormClass(TForm(Application.FindComponent('Form_Apply_Money_To_OA')));
aform:=TForm(myform);
aform:=myform.Create(nil);
try
aform.ShowModal;
finally
aform.Free;
end;
以上代码总是报错.....我想要实现的效果是用一个字符串动态地创建一个窗体,并把它showmodal出来.......
如果要实现你的功能,我觉得可以这样:
type
FormNameRec=record
Name:String;
ClassName:tformclass;
end;
然后再用此结构体记录系统中的全部类名称与其名,再创建时在结构体数组中搜索后返回ClassName,然后再创建窗体对象
registerclass了,那还叫什么动态创建......请问到底该怎么做呢?
实际上,windows也是要注册类的,只不过大部分情况下,我们看不到这些代码,架构已经帮我们实现了,
你想根据字串创建对象,当然要多作些东西了
把你可能动态创建的类在类声明的单元里的initialization部分里全部注册一下就可以了
frmclass: TFormClass;
frm: TForm;
begin
frmclass := TFormClass(application.FindComponent('Form1').ClassType);
frm := frmclass.Create(nil);
frm.ShowModal;
frm.Free;
必须Form_Apply_Money_To_OA这个窗体已经创建了啊,直接用就是了myform:=TForm(Application.FindComponent('Form_Apply_Money_To_OA'));如果真的字符创创建窗体的话,我觉得还是1楼sonicer说的对啊,registerclass, findclass