如何动态打开窗体(100)

  • 主题发起人 主题发起人 jonyhuang
  • 开始时间 开始时间
J

jonyhuang

Unregistered / Unconfirmed
GUEST, unregistred user!
datasetForm := tdatasetForm.Create(Application); datasetForm.ShowModal; datasetForm.free; datasetForm:=nil;datasetForm 为窗体名称,先打算将所有的窗体名存入数据库中,动态调出,用动态窗体名称打开窗体,不知道如何能做到,请指教。
 
为每一个窗体都注册一下RegisterClass然后要GetClass(窗体名)取得相应的窗体类,创建
 
窗体名存入数据库中没有什么意思,窗体的caption存入还有一点意义~~~procedure TForm1.Button1Click(Sender: TObject);var datasetform:tform;begin with adoquery1 do close; sql.clear; sql.add('select * from table where fmname='datasetform''); open; datasetForm:=tForm.Create(Application); datasetForm.Caption:=adoqurey1.fildbyname('fmname').asstring; datasetForm.ShowModal; datasetForm.free; datasetForm:=nil;end;这样做的好处是,caption可以统一改,不用一个一个改~~ 缺点就是每个创建窗体的地方都要加查询语句
 
这么做本身就没什么意义如果你的那些动态窗体都是加到主工程里的,那根据classname自己做个大的if列表判断该创建哪个就行了,直接写死到源码里if name=1 then a:=tforma.createelse if name=2 then b:=tformb.ctreat...这样的如果你的动态窗体都做成dll加载(类似于扩展模块形式),你应该设置个公共调用方法,而具体的功能、窗体创建等都由dll自己调用比如:function ctreatwin; if find(window.dll) thenbegin createwin:=getdllfunction('window.dll','createwindow') cteatewin;end
 
意义不大!动太调用方法很多,DLL,BPL,写INI,写数据库,子窗体动态生成..都可以实现..初级选手..接点分..太穷了...
 
无意义! 同意楼上各位的说法。
 
后退
顶部