我昨晚上搞定了,在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给它!!!
写的很急,大家能看明白吧!