讨论:在Dll中使用Mdi窗体存在的问题 (200分)

  • 主题发起人 主题发起人 redcony
  • 开始时间 开始时间
R

redcony

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(!]我正在做一个MDI的应用程序,有几个不同的子窗体在几个Dll 中
主窗体和子窗体之间的通讯用消息实现,只是我把Screen传人Dll后创建子窗体时(子窗体上
有一个TStatusBar)出现"Cannot Assign a font to a font"为什么啊!!!
 
这不是如何定义动态库的问题,而是如何控制dll中的窗口。我想这样可以吧:
在dll中建立好form,并导出一个函数,在函数中根据主窗体传来的参数建立该form的实例。
这其中关键是传递什么参数,并如何控制子form的属性,使它成为主窗体的子窗体。具体实现我
曾经用过,只是有时会出现错误,可能是内存管理问题,后来也就没有深入。
 
自己定义消息号,然后在窗体中第一自己的消息接受函数.即可.
这样和一般的dll没有区别
 
我做了一个例了,如果要的话我给你发过去.
 
to windbell:
redcony@sina.com
 

为什么我调出Dll子窗体时出现"Cannot Assign a font to a font" 错误?
 
如果用BPL效果会好一些。
 
[red]各位大富翁快帮忙啊!急死了!!!!!!![/red]
 
还是不行,我发现不能将Screen传人Dll,否则在程序退出时回出现
异常,如果不传Screen在主程序的MDICHILDCount和MDIForms无法访问
到DLL中创建的子窗体
 
to winbell:
邮件收到了,和我的一样,但总是出错。
 
总是出错->
是不是我发的程序出错?
在我的机器上一切正常!其中的.exe和.dll就是运行时生成的.你可以换一台试验一下,
如果还这样的话就要检查你的机器和软件!
 
我倒是编过往DLL中传递过Ttable 也是不行 最后加入sharemem单元就行了
你也式式吧
 
To redcony
留下qq和mail我发给你
 
老人家
给我发一个参考好吗?我是想传一个tADOCONNECTION实例。。
l_on@163.com
 
redcony@sina.com
 
讨论:在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静态链接到主程序时出现的。
 
我也要学例子,那位帮帮先.
 
希望大家讨论一下心得,互相交流一下
 
windbell你好,“在Dll中使用Mdi窗体存在的问题”你的例子能不能也给我一个学习学习
to:UNiVAN@163.net
谢谢!!!
 
给 delphi PACK一下试试!
 
后退
顶部