如何解决mdi子窗口消失的问题?(50分)

  • 主题发起人 主题发起人 alan_yang
  • 开始时间 开始时间
正是你用了背景图的原因。
你在点子窗口外时。子窗口掩在了背景图的后面了。
呵呵。给点分吧。
 
呵呵,分数是会给的,我自己也了解到原来问题就出在flash上,
把flash的enabled设置为false就ok了。还是要多谢各位!
顺便再提个问题:如何在程序结束的时候关闭所有已打开的子窗口(包括活动的和非活动的)
我用下面的代码只能关闭当前活动的子窗口:
procedure Tmainfrm.closeall1Click(Sender: TObject);
var
i:integer;
begin
for i:=MdiChildCount-1 downto 0 do
ActiveMDIChild.Close;
end;
 
var

I: Integer;
begin
with Form1 do
for I := MDIChildCount-1 downto 0 do
MDIChildren.Close;

end;
 
可以肯点的是,子窗体的FormStyle没有设成fsMDIChild。是fsnormal
MDIChild是不能隐藏的,同时关闭时完全释放要用action:=caFree
 
同意jsxjd。
 
to zhoulide:
我的子窗口全部已经设置成fsmdichild了,action也是cafree
但是用我的方法去关闭的话只能关闭当前打开的子窗口而用jsxjd的就可以了

另外再探讨一个问题:cascade方法调用之后,窗口是层叠的,能不能改成所有窗口的top
都是1,然后left就是它定出的left,例如:
form1.top:=1;
form1.left:=0;
form2.top:=1;
form2.left:=20;
form3.top:=1;
form3.left:=30;

呵呵,各位我是贪心一点,但实在不想再另提问题,先此多谢了。
 
是不是要改写forms单元的cascade方法呢?
 
强烈建议你用ysai的通用过程,不管是不是MDI窗体都行
procedure OpenForm(FormClass: TFormClass; var AForm;
AOwner:TComponent=nil);

可以一劳永逸,我深有体会


 
还没搞定,你到底要达到什么效果?
 
呵呵,jsxjd你不用着急,我是懒的再提一个问题。
是想趁着人气这么旺把一个新问题解决掉,其实我上面都有说了:

cascade方法调用之后,窗口是层叠的,能不能改成所有窗口的top
都是1,然后left就是它定出的left,例如:
form1.top:=1;
form1.left:=0;
form2.top:=1;
form2.left:=20;
form3.top:=1;
form3.left:=30;
就是在菜单里完成这样的动作:把让所有打开的子窗口在同一水平线上依次排列,
不要像cascade那样成阶梯形的排列。是不是要改写forms单元呢?
 
算了,看了一下forms中的cascade实现办法,它使用
sendmessage调用winapi的,看来是无法实现的了。
多谢各位的热情参与,结束问题了。
 
算了,察看一下forms中cascade的实现,是调用winapi的sendmessgae实现的。
看来是无法达到我要求的效果的。
多谢各位热情参与,结束问题了。
 
结束问题了
 
后退
顶部