• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

DELPHI中MDI子窗口的关闭和打开

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

DELPHIMDI子窗口的关闭和打开

DelphiMDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例:

 

procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);

begin

   Action := caFree;

end;

  

 

Delphi为一个Form的关闭行为指定了四种方式,分别是:

caNone     禁止Form被关闭

caHide     Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序访问。

caFree     Form被关闭,并且释放其占用的资源。

caMinimize  Form被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。

 

===========================================================

MDIForm调用MDIChild窗体时要这样用  

引用

 

   if   not   Assigned(Form2)   then   begin  

               Form2:=TForm2.Create(Self);  

               Form2.Show;  

         end   else  

Form2.BringToFront;  

      

   另外在MDIChildOnClose,   OnDestroy中要以下代码   Form2MIDChild窗体的名称  

   procedure   TForm2.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  

   begin  

         Action:=caFree;  

   end;  

      

   procedure   TForm2.FormDestroy(Sender:   TObject);  

   begin  

         Form2:=nil;  

   end;    

=================================================

如何获得当前打开的子窗口的数量?

Application.MainForm.MDIChildCount

 

==================================================

怎么关闭所有打开MDI子窗体?

 

除了在主窗体写入  

   procedure   TFrmMain.N15Click(Sender:   TObject);  

   var   I:integer;  

   begin  

         if   Application.MessageBox('确定要关闭所有窗口吗?','System',mb_iconinformation+mb_yesno)=id_yes   then  

         begin  

         for   I:=MdiChildCount-1   downto   0   do  

         MdiChildren[I].Close;  

         end;  

   end;  

      

   还要在各个子窗口写入  

   procedure   TFrmchildn.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  

   begin  

         action:=cafree;  

       Frmchildn:=nil;        

   end;  

 

procedur TFrmchildn .FormDestroy(Sender:   TObject);  

     begin  

           TFrmchildn:=nil;  

     end;  

 

 

=================================================

根据以上的测试,有效代码:

主窗体:

引用

 

procedure TForm1.a2Click(Sender: TObject);

begin

if Assigned(Form2) then

 

   begin

Form2.Close;

   end;

 

end;

 

procedure TForm1.a3Click(Sender: TObject);

begin

   if not Assigned(Form2)   then //判断子窗体是否已打开

   begin

   Form2:=TForm2.Create(Self);

   Form2.Show;

   end

   else Form2.BringToFront;

end;

 

子窗体:

引用

 

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action:=caFree;

end;

 

procedure TForm2.FormDestroy(Sender: TObject);

begin

Form2:=nil;

end;

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
(Delphi)UsingtheDiskCache使用磁盘缓存发布时间:2022-07-18
下一篇:
Delphi访问https/SSL、OpenSSL发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap