我们在项目进行的当中,碰到这样一个问题,随着项目的进行,由于窗体跟模块越来越多,大概有几百个,应用程序越来越大,现在已经接近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来实现吗?还可不可以通过方式实现,比如包的形式,以及怎么实现,谢谢了!
解决方案 »
- 请说说Delphi的intraWeb
- 我用webbrowser做的客户端浏览,发现运行一段时间之后,程序占用内存一直增加,想问下如何释放内存
- TreeView生成树形结构,数据库结构比较特别,本人是通过递归画树的方式,画TreeView树,但是不成功,请各位高手不吝赐教;
- 来深圳20天,简历发了5份,没人理
- Delphi中从Access数据库中取得时间的问题
- 有什么简单的方法将access数据库中的图片导出成二进制格式的文件吗???(拜托了……)
- 替换函数
- 有无人可以解决QUICKREPORT的LABEL的中文字换行出现错码的问题?
- 我的DELPHI6在启动时出现如下错误,请大家帮帮我!
- 如何动态创建一个新的窗体,并且在其动态创建一些常用控件?谢谢!
- '简单'问题
- delphi中控制word文档
var NewForm: TForm;
begin
//此时如何判断该窗体是否已经被创建?
if Assigned(MDIMainForm)=false then //窗体没有被创建
NewForm := TFormClass(FIndClass('T'+ForMName)).Create(Application); //or Create(nil)?
NewForm.Show;
end;
exports
CreateMDIChildForm;
begin
RegisterClass('窗体数祖');
end;
ShowMessage(Format('Component %s is not created',[ComponentName]))
else
ShowMessage(Format('Component %s is created already',[ComponentName]))
还有一个问题,我是每一个模块写一个dll呢,还是一个摸板写一个dll,哪种效率更高(1个摸板有100个模块)
用FindWindow函数查找程序句柄是否存在,判断程序是否创建。
为什么不10个模块一个DLL呢?