我们在项目进行的当中,碰到这样一个问题,随着项目的进行,由于窗体跟模块越来越多,大概有几百个,应用程序越来越大,现在已经接近20M,现在决定把所有的模块跟摸板都放到Dll里面去。应用程序中只保留主窗体!
现在碰到的问题是,由于我们所有的菜单都是动态创建的,所以窗体也都是用RTTI动态创建的,点击菜单时得到某一窗体名FormName,"T'+FormName得到该窗体的类型名称,然后通过这样的方式来创建 NewForm := TFormClass(FincClass('T'+FormName)).Create(Application),由于主窗体里什么都没有,我们必须在Dll里面实现RegisterClass[窗体类数祖],是在dll的begin..end 之间写吗?另外我们在dll里面定义了一个创建子窗体的函数:
CreateMDIChildForm(Application: TApplication; MDiMainForm: TForm; FormName:string)
var NewForm: TForm;
begin
//此时如何判断该窗体是否已经被创建?
if 如果没有被创建 then
NewForm := TFormClass(FIndClass('T'+ForMName)).Create(Application); //or Create(nil)?
NewForm.Show;
end;
exports
CreateMDIChildForm;
begin
RegisterClass('窗体数祖');
end;
请问这样写有问题吗?以及CreateMDIChildForm怎么完善!
还有一个问题就是创建瘦客户机器程序一定要通过dll来实现吗?还可不可以通过方式实现,比如包的形式,以及怎么实现,谢谢了!
现在碰到的问题是,由于我们所有的菜单都是动态创建的,所以窗体也都是用RTTI动态创建的,点击菜单时得到某一窗体名FormName,"T'+FormName得到该窗体的类型名称,然后通过这样的方式来创建 NewForm := TFormClass(FincClass('T'+FormName)).Create(Application),由于主窗体里什么都没有,我们必须在Dll里面实现RegisterClass[窗体类数祖],是在dll的begin..end 之间写吗?另外我们在dll里面定义了一个创建子窗体的函数:
CreateMDIChildForm(Application: TApplication; MDiMainForm: TForm; FormName:string)
var NewForm: TForm;
begin
//此时如何判断该窗体是否已经被创建?
if 如果没有被创建 then
NewForm := TFormClass(FIndClass('T'+ForMName)).Create(Application); //or Create(nil)?
NewForm.Show;
end;
exports
CreateMDIChildForm;
begin
RegisterClass('窗体数祖');
end;
请问这样写有问题吗?以及CreateMDIChildForm怎么完善!
还有一个问题就是创建瘦客户机器程序一定要通过dll来实现吗?还可不可以通过方式实现,比如包的形式,以及怎么实现,谢谢了!
解决方案 »
- cxScrollBar单元中出现编译错误
- 千金散去还复来。。
- 超市的哪种打印是怎样实现的(在QR中)?
- 求助,,fastreport中页码显示问题。
- (300分)有没有画图方面的行家在线?关于定位的精确问题。在线等,比较急的..
- word中 插入-->字符 中的特殊字符是如何读取出来的?
- 帮忙说说选择什么数据库比较好?
- 急,请问用delphi怎样控制excel预览的纸张大小和横向综向打印
- 怎样固定DBGRID的显示宽度!急!在线等候!
- 我用NMSMTP组件发送邮件,可是有些不能发,错误提示:503 Need RCPT Before DATA,WHY?
- 大哥们,救小弟我,我的一个控件在2000,XP下可以注册,到了WIN98,WIN ME就不能注册
- 怎样获取在canvas 画线的事件
不过我我采用功能分割,动态加载功能FORM的方法,不是采用动态注册类的方法,因为采用registerclass注册所有界面类的话,系统资源会不停的消耗下去,
我采用动态功能菜单和按钮和事件,动态调入该最小功能FORM,最多一个功能为3个界面,这样避免资源的大量浪费,用完就释放,而且可以使我的DLL功能很多,但很小。
我的主程序总共才800多K,而且很WEB化,可以用户自己定义功能的顺序,和用法。
实现最大面向对象。
采用DLL最大的麻烦就是静态注册DataModal的问题要解决好!就能达到目的。
for I := 0 to MDIChildCount-1 do
begin
if(MDIChildren[I].ClassType = AFormClass) then
begin
MDIChildren[I].BringToFront;
bFoundChild := True;
Break;
end;
end;
if(not bFoundChild) then
begin
FActiveClinetForm := AFormClass.Create(Self);
end;