模式窗口与非模式窗口的问题(50分)

  • 主题发起人 主题发起人 胆儿肥
  • 开始时间 开始时间

胆儿肥

Unregistered / Unconfirmed
GUEST, unregistred user!
请教:有3个form,主窗口form1,子窗口form2,form3
在form1中以非模式方式打开form2 (show),
在form2中以模式方式打开form3 (showmodal),
在不关闭form3的情况下,我想操作form1,该怎么做?
 
应该不行
ShowModal指的是对于整个Application,而不是Form2
 
我的目的是:打开form3的时候,不能操作from2(不隐藏),但是可以操作from1,有什么办法啊高手?
 
Form2.Enable := false;
 
可以这样解决:
1、全用非模式方法。
2、Form2的Activate事件如下。

procedure TForm2.FormActivate(Sender: TObject);
begin
if Form3.Showing then
begin
Deactivate;
Repaint;
Form3.BringToFront;
end;
end;
 
楼上nicai_wgl大哥的办法很不错,基本实现了目的,我已经决定给你分了,只是有一点小小瑕疵:
我的情况有一点特殊,form2和form3都在一个bpl包中,在主程序form1中调用form2时,
会提示“地址违例访问”,不知道怎么回事?
 
在增加上面这段代码前,没有这个问题。
 
nicai_wgl
很久不见,最近好吗?
听说已经买房子准备结婚了,恭喜:)
 
To muhx:
呵呵,还是老样子,你也不快了吗?同喜同喜 ^_^

To 胆儿肥:
bpl实际上就是DLL,我不知道你Form2变量是声明在哪个单元,把声明改到Form1所在单元试试,实在不行试试动态创建Form2。
 
nicai_wgl大哥:如果你方便,我想把源码传给你,请你给看看。。。
 
你的Form3是系统负责创建还是自己的程序负责创建? 如果是自己创建,那么可能在Form2激活的时候Form3还没创建.
 
Form3是手工创建,在Form2上打开Form3的时候。

问题已解决,在加载Form2的时候,Form3还未创立,因此在nicai_wgl大哥的代码前加了一句:
procedure TForm2.FormActivate(Sender: TObject);
begin
if assigned(form3) then //加了这一句,即Form3创立后才执行
if Form3.Showing then
begin
Deactivate;
Repaint;
Form3.BringToFront;
end;
end;
分数有限,不成敬意,谢谢nicai_wgl大哥和各位!
 
后退
顶部