MDI应用程序能否转换成activeform?(100分)

Y

yuansh

Unregistered / Unconfirmed
GUEST, unregistred user!
MDI应用程序能否转换成activeform?
 
应该时可以的,但我记不清如何实现了。
机械工业出版社的delphi4。x实用教程里面有,你可以找找看。
 
关注!!!!
 
关注!!!!
 
李维的多层结构系统篇好像讲过。自己找找
 
请继续或结束
 
谁找到了通知我,我试了好久!
 
什么叫作activeform呀?
 
好像不行吧,MDI为线程不安全的
(印象中,待确认)
 
有人解决了吗?
 
好像不可以吧.
 
我昨晚上搞定了,在csdn上发了,转帖过了吧:
昨晚上,翻遍了大富翁论坛和csdn都没找到答案,反而问这个问题的特别多!只好自己研究,搞到2点多钟,总算搞定了!

注意:下面所提到的ActiveForm是只得默认的ActiveForm,而MainForm则是加入的一个我们希望创建的MDI父窗口,注意与Application.MainForm区别哦:)
解决的办法实际上很简单,但是有一点,就是MDIForm不能是那个ActiveForm,而应该是做好的一个MainForm,在ActiveForm的Create事件里面处理创建MainForm,然后设置MainForm的相关属性:MainForm.parent := ActiveForm;MainForm.Align:=alClient;MainForm.BorderStyle:=bsNone;等。这样做出来的效果,是看不出差别的!
实际上大家一般都会像上面说的作,其中李维老师的书中也是这么说的。
但是你却会发现mdi不能创建,会告诉你不存在mdi父窗口!

debug的时候发现,Application.Mainform=nil,这就是不能创建mdi的原因了。
而ActiveForm是由TActiveFormFactory.Create创建的,不能由application创建,这就是不能让ActiveForm作为MDI父窗口的原因。
所以解决的办法就在ActiveForm的OnCreate事件中创建MainForm的时候,不能够MainForm:=TMainForm.create(self);而应当用Application.CreateForm(TMainForm, MainForm);这下就可以了!!!:)
要知道Application.MainForm是只读属性,不能够自己指定一个Form给它!!!
写的很急,大家能看明白吧!
 
接受答案了.
 
顶部