大项目的功能模块化和单一界面显示实现问题(200分)

  • 主题发起人 主题发起人 Geminiyc
  • 开始时间 开始时间
G

Geminiyc

Unregistered / Unconfirmed
GUEST, unregistred user!
本人欲开发一个大项目,它包括多个功能模块,每个模块又含若干窗口单元。
在没有模块化以前,整个系统对应一个exe文件,统一编译。为了统一界面,所有窗口都包含一个panel1,其全部组件都在panel1上,在需要显示该窗体时,再动态创建之,并将子窗口panel1转移到主界面的panel1上显示,代码如下——
if Form1=nil then
Form1:=TForm1.Create(application);
Form1.Panel1.parent:=FrmMain.panel1;
FrmMain.panel1.BringToFront ;
我欲用dll或者package的方法让每个功能模块对应一个文件,并且同样实现先前的单一界面显示,不知道该如何操作,请教各位。谢谢。
 
我也想知道,有人回答,我收藏啊。。
 
http://delphibbs.com/delphibbs/dispq.asp?lid=2968336
 
if Form1=nil then
Form1:=TForm1.Create(application);
Form1.Panel1.parent:=FrmMain.panel1;
FrmMain.panel1.BringToFront ;
请教一个问题,
上面的代码只是创建窗体,你在什么时候释放?
如果不释放,系统不是越来越慢
 
to lgwen:
单用户一般用一个功能模块(通过主菜单ID号判断),如果确实需要进行模块切换,再把当前模块中已经打开窗口全部free……
 
谢谢阿亮,我按照你的方法编译得到了delphi.bpl,但并不知道具体该怎么应用(见笑了)。
你前面写的——

你可能发布的应用程序结构可能是以下结构:
App.exe (* 主程序 *)
Borland.bpl (* 被重新编译过的Borland VCL单元运行时包 *)
Common.bpl (* 应用程序公用包, 所有的全局结构和单元定义和实现在此包中,主程序和模块包共同uses此包的的共用单元,以实现全局共享 *)
Module1.bpl (* 模块一 *)
Module2.bpl (* 模块二 *)

这正是我想实现的,但不知道该如何操作,能否给一个具体的例子或者代码。
 
你需要维护一个已经装入的包的列表
调用模块时, 检查包是否已经装入, 如果没有装入
动态装入包:
hPackage := LoadPackage(APackageName);
检查 TForm类是否已经创建过实例对象
oForm := TForm(Application.FindComponent(cFormName));
如果没有创建, 则创建之
oForm := TForm(TComponentClass(FindClass(cFormClass)).Create(Application));
其中关键的是在每个窗体类最后面注册它
initialization
RegisterClass(TfrmXXX);
finalization
UnRegisterClass(TfrmXXX);
上面的代码片段中的 cFormClass = TfrmXXX。
 
非常感谢!我先试试,有问题再请教:)
 
这个不是我的吗?
去 http://www.david-studio.org/ 看看
 
为什么让panel的parent指向 主窗体的panel, 我认为最好让业务子窗体装在主程序的panel比较合理,另外 公用部分写成一个包, 大家调用,这样应用程序比较小, 且易于管理和调用。 根据业务划分模块, 能抽象出来的就放在包里。 配合接口方式,系统就比较灵活,易维护。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3492630
就是用你想要得方式实现的饿,想看得话抓紧哦
 
问题基本解决,感谢阿亮、绵绵细雨及各位
大家也可以参考一下这篇文章,写得很详细
http://dingjie.cnblogs.com/articles/195195.html
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部