(300分求救)如何在activeform中实现mdi常口?(100分)

A

armay

Unregistered / Unconfirmed
GUEST, unregistred user!
我是如下处理的:
在窗口Ax_form1(activeform)中的oncreate中生成form1(Mdiform),程序如下:
form1:=Tform1.create(self);
form1.parent:=self

form1.align:=alclient;
form1.borderstyle:=bsnone

form1.visible:=true;
form1设成了mdiform;
然后,我在button1的onclick中:
form2:=Tform2.create(self);
可是点击button时,总是出现:“no mdi form activate”的错误
请大虾指教!
form2.show;
form2是子窗口;
 
W

weekboy

Unregistered / Unconfirmed
GUEST, unregistred user!
试试把form1.show代替form1.visible:=true;

 
R

romanangel

Unregistered / Unconfirmed
GUEST, unregistred user!
activeform中无法实现mdi窗口!
 
V

VoodooBoy

Unregistered / Unconfirmed
GUEST, unregistred user!
肯定能实现,我研究一下先!
你的问题是因为ActiveForm和mdichild不是同一个application导致的.
我今天刚开始要用这个activeform,正准备开始看看!
 
V

VoodooBoy

Unregistered / Unconfirmed
GUEST, unregistred user!
挺麻烦的,刚才看了一下,因为activeform是一个activex,没有aplication全局变量,按照delhi的
mdi实现方式是无法实现的,哎,得另外想办法了!
 
V

VoodooBoy

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

fmz

Unregistered / Unconfirmed
GUEST, unregistred user!
到底是不是约,我明天用一用看,最近我也是有这方面的问题呀
 
V

VoodooBoy

Unregistered / Unconfirmed
GUEST, unregistred user!
不过不要高兴得太早,这个问题是解决了,但是却存在一个致命的错误!!!
或许与我的软件环境相关(win2k server, ie6中文正式版, delphi6)
当你最大化mdi子窗口的时候,偶尔出现调用User32.dll核心错误,我本以为我程序问题,
但是写了一个最简单的mdi作,出现同样问题,而且是偶尔出现.
汇编跟进去,发现call了user32.dll中一个不存在地址的函数!
哎,你们也测试一下,有没有类似问题,如果没问题,清告知你们的软件环境!
我急需解决这个问题!
 
V

VoodooBoy

Unregistered / Unconfirmed
GUEST, unregistred user!
我个人认为这可能是一个ie镶入activex的一个bug,或者是delphi6实现的acitvex某方面的bug!
希望能有高手证明我错了!!!!!
 
L

lanjian

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(][:(]经过反复的检查,VoodooBoy提的问题的确存在!但一时找不到方法解决!
期盼大侠!
 
A

armay

Unregistered / Unconfirmed
GUEST, unregistred user!
[:)][:)][:)]提前
 
V

VoodooBoy

Unregistered / Unconfirmed
GUEST, unregistred user!
俺放弃了!因为项目更改,我也不用搞这一块了,而且也花了不少时间,还是
搞不定!
请高人上场了!
 
Y

ydl_2000

Unregistered / Unconfirmed
GUEST, unregistred user!
K

KenLee

Unregistered / Unconfirmed
GUEST, unregistred user!
大家别放弃啊,这个问题意义重大,涉及调用Mdi主窗口去创建子窗口的难题,请高手指点啊!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
492
import
I
顶部