讨论:在Dll中使用Mdi窗体存在的问题(CB5)
1. 不使用Build With Runtime Package:
1.1 需要把Application全局变量传人Dll并覆盖原有的Application,在Dll退出时还原(跟踪代码发现还原后DLL的Application变量仍然是NULL) 才能创建MdiChild 窗体
1.2 创建的子窗体在主程序中访问不到,只有在主程序中自己记载各窗体以及当前活动的窗体
1.3 创建的子窗体最大化后和主窗体(含ToolBar)融合的不好看。
1.4 主窗体关闭时不触发子窗体的CloseQuery事件,却触发子窗体的Active事件,需要写代码控制子窗体的CloseQuery和Close事件。
1.5 编译的文件大。
2. 使用Build With Runtime Package(只包含Vcl50.bpl)
2.1 需要发布Vcl50。Bpl到系统目录下
2.2 每一个在动态库中显示的其他窗体(除了子窗体外)在任务栏上会出现图标,如果显示的窗体比较多时,效果太差。
2.3 主程序中自动维护当前所有子窗体
2.4 编译出的文件小
3. 其他
在方案1中如果传人Screen (子窗体上有一个TstatusBar)在创建时会出现一个“Cannot
Assign a font to a font “错误,在退出时好像也有访问非法地址的问题
在方案2中如果把其他窗体设为ToolWindow则可解决任务栏显示的问题,但是窗体的系统按钮没有了,并且用MessageBox也会在任务栏上产生图标。
以上所有的现象是在Dll静态链接到主程序时出现的。